Python

Python

SoftLayer 這家 IBM 公司提供以 Python 為基礎的 API 套件,承擔起發出手動 XML-RPC API 呼叫的重任。以 Python 為基礎的 API 需要至少 Python 2.6。若要將 Python 套件安裝到 Python 安裝的 site-packages 目錄,請執行下列指令:


pip install softlayer

如需更多安裝選項,請參閱 Python 連結文件

發出 API 呼叫

安裝 API 用戶端之後,首要任務是在 Script 中匯入 SoftLayer 套件。請使用下列這一行來達成此目的:

import SoftLayer

接下來,我們需要建立用戶端物件。以下的程式碼 Snippet 提供設定 API 用戶端的範例:

import SoftLayer
client = SoftLayer.Client(username='YOUR_USERNAME', api_key='YOUR_API_KEY')

當 API 用戶端物件備妥之後,我們就可以利用它來發出呼叫。以下說明如何取得現行帳戶的帳戶詳細資訊。此呼叫不採用任何參數,而且不需要 ID,因此它是自然起始點。

client['Account'].getObject()

以下說明如何建立新的「CloudLayer 運算執行實例」,這需要使用「虛擬來賓」記錄。虛擬來賓記錄是複式類型,是以 Python 字典的形式傳入。

 
client['Virtual_Guest'].createObject({
    'hostname': 'myhostname',
    'domain': 'example.org',
    'startCpus': 1,
    'maxMemory': 1024,
    'hourlyBillingFlag': 'true',
    'operatingSystemReferenceCode': 'UBUNTU_LATEST',
    'localDiskFlag': 'false'
})

以下說明如何在 DNS 服務上建立新的網域區域。

 
new_domain = client['Dns_Domain'].createObject({{
    'name' : 'example.org',
    'resourceRecords' => [
        {
            'host' : '@',
            'data' : '127.0.0.1',
            'type' : 'a',
        }
    ]
})

現在我們已為網域建立了一個區域,下列範例顯示如何在事後於該區域中加入 A 記錄。請注意,如何以位置引數傳入參數,以及如何使用 id 關鍵字引數傳入所需的網域 ID。此範例使用在前次呼叫中建立的網域 ID。[Sarah Reese](請問一下 - 「網域 ID」應該是大寫或小寫?)

new_record = client['Dns_Domain'].createARecord('myhost', '127.0.0.1', 86400, id=new_domain['id'])
 
print("New A record id: %", new_record['id'])

使用物件遮罩

物件遮罩可讓您控制在每一個呼叫中傳回的屬性。它可用來更深入鑽研某個物件以取得特定的[Sarah Reese] 我們遺漏了本句其餘部分。

# Because of the object mask that we're using we will retrieve the following
# for each server:
# * operating system passwords
# * all network components
# * the datacenter the server is located in
# * the number of processors
object_mask = 'operatingSystem.passwords, networkComponents, datacenter, processorCount'
hardware = client['Account'].getHardware(mask=object_mask)

使用結果限制

SoftLayer API 允許限制所傳回結果數和偏移數,以更有效地控制在特定呼叫中傳回的資料量。以下的範例會顯示分頁。

client['Account'].getVirtualGuests(limit=10, offset=0)  # Page 1
client['Account'].getVirtualGuests(limit=10, offset=10)  # Page 2

錯誤處理

發出 SoftLayer API 呼叫時發生的錯誤顯示為異常狀況。下列 Script 提供的範例顯示如何處理 API 錯誤。在此情況下,我們直接印出錯誤的詳細資訊並結束:

client = SoftLayer.Client(username='invalid', api_key='invalid')
 
try:
    account = client['Account'].getObject()
except SoftLayer.SoftLayerAPIError as e:
    print("Unable to retrieve account information faultCode=%s, faultString=%s"
          % (e.faultCode, e.faultString))
    exit(1)
# This should output:
# Unable to retrieve account information faultCode=SoftLayer_Exception, faultString=Invalid API token.

管理程式

本節上方的一切討論說明如何使用基本 API 用戶端與在 SLDN 這裡所記錄的 XML-RPC API 進行互動。Python 連結也有管理程式,它們從直接 API 呼叫中抽離一些功能。如需所有可用管理程式的參照,請參閱 API Python 用戶端文件

如上所述建立新的「CloudLayer 運算執行實例」,其類似使用「Python API 用戶端」管理程式(不確定「Python API 用戶端」管理程式是否正確,不過您如有需要可以任意取代之):

import SoftLayer
client = SoftLayer.Client(username='YOUR_USERNAME', api_key='YOUR_API_KEY')
cci_manager = SoftLayer.CCIManager(client)
cci_manager.create_instance(
    hostname='myhostname',
    domain='example.org',
    cpus=1,
    memory=1024,
    hourly=True,
    os_code='UBUNTU_LATEST',
    local_disk=False)

以下的範例會列出在 dal05 資料中心擁有超過 8 GB 記憶體的硬體伺服器。

hardware_manager = SoftLayer.HardwareManager(client)
hardware = hardware_manager.list_hardware(datacenter='dal05', memory='> 8')

管理程式不失為一個好方法來引進一個小型 API 子集,並提供執行一般作業的參照。

更多資源

Python 連結是在 GitHub 上公開開發。會開發新特性,並透過 GitHub 的整合問題追蹤報告錯誤。這裡有 SoftLayer API Python 用戶端的完整文件。連結還有這裡未提到過的指令行介面。您可以在其完整文件網站上找到更多的相關資訊。