Python

Python

SoftLayer 是一家 IBM 子公司,它提供了一种基于 Python 的 API 程序包,可避免手动发出 XML-RPC API 调用的繁重
工作量。基于 Python 的 API 至少需要 Python 2.6。要将 Python 程序包安装到 Python 安装的
site-packages 目录中,请运行以下命令:


pip install softlayer

请参阅 Python 绑定文档,以获取更多安装选项。

发出 API 调用

安装 API 客户端后,要做的第一件事是在脚本中导入 SoftLayer 程序包。可使用以下行来完成该操作:

import SoftLayer

接下来,我们需要创建客户端对象。以下代码片段提供了关于设置 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 调用时出现的错误将显示为异常。以下脚本提供了关于如何处理 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.

管理器

本部分以上的所有内容都是介绍如何在 SLDN 上使用基本 API 客户端与此处记录的 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 千兆字节的硬件服务器。

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

向一小部分 API 中引入管理器是一种不错的做法,管理器可作为完成常见任务的参考方法。

更多资源

Python 绑定是在 GitHub 上公开开发的。开发新功能,并通过 GitHub 的“集成问题跟踪”功能报告错误。此处提供了 SoftLayer API Python 客户端的完整文档。这些绑定还有一个此处未
提及的命令行界面。您可以在其完整文档站点上找到关于该界面的更多信息。