完成本文中的步骤的先决条件:
一个 IBM SmartCloud Enterprise (SCE) 帐户
一个 SoftLayer 帐户
设置环境
此示例假设您能够访问一个 Red Hat Enterprise Linux® 实例。导出以下环境变量:
$
export SL_API_USER={your.SoftLayer.user.id}$ export SL_API_KEY={your.SoftLayer.API.key}$ export SL_API_BASE_URL=api.softlayer.com/rest/v3$ export SL_API_PUBLIC_ENDPOINT="https://$SL_API_USER:$SL_API_KEY@$SL_API_BASE_URL"
从 http://curl.haxx.se/download.html 或从您的 Linux 发行版存储库下载并安装 curl 实用程序(例如 yum install curl)。Curl 是一个使用 URL 语法传输数据的命令行工具。
从 http://lloyd.github.com/yajl 下载并安装 yajl(另一个 JSON 库)或使用 sudo yum install yajl。您需要将这个软件用于 json_reformat 工具,用它来打印 SoftLayer RESTfull API 在被查询时返回的 JSON 输出。
执行简单的 SoftLayer REST API 请求
如 http://sldn.softlayer.com/article/REST 中所述,REST 请求的端点包含一个基础主机名称和文件夹名称,后跟您想要调用的 API 服务的名称。
如上所述,通过 json_reformat 传输 SoftLayer 输出,会采用某种人类容易理解的格式显示它。
要获取帐户的关联的虚拟来宾对象,可使用:
curl -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Account/getVirtualGuests | json_reformat
执行更复杂的请求
在订购一个计算实例时,有许多选项可供使用。使用 getCreateOBjectOptions 方法确定有哪些选项:
$ curl -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest/getCreateObjectOptions | json_reformat
选项列表非常大;幸运的是只有 7 个是强制性的。详细列表可从 SoftLayer 参考文档 中获取。
要使用命令行工具 curl 创建一个 SoftLayer Cloud Computing Instance (CCI),可执行以下步骤:
使用此代码创建一个 JSON 格式的文件,并将它命名为 cci.json:
{ "parameters": [ { "operatingSystemReferenceCode": "REDHAT_6_32", "localDiskFlag": true, "hourlyBillingFlag": true, "maxMemory": 2048, "startCpus": 2, "domain": "softlayer.com", "hostname": "testing" } ]}
在命令行上,运行以下命令:
$ curl -X POST -d @cci.json $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest | json_reformat
-d 参数从使用 @ 参数指定的文件发送纯 ASCII 格式的数据。上述命令等效于:$ curl -X POST -d '{ "parameters": [ { "operatingSystemReferenceCode": "REDHAT_6_32", "localDiskFlag": true, "hourlyBillingFlag": true, "maxMemory": 2048, "startCpus": 2, "domain": "softlayer.com", "hostname": "testing" } ]} $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest | json_reformat
从输出导出 id 值。以下这个请求会需要它:
$ export CCI_ID=id_value
要删除刚创建的实例,可将 deleteObject 方法传递给 SoftLayer Virtual_Guest 服务:
$ curl -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest/$CCI_ID/deleteObject | json_reformat
如果操作成功结束,SoftLayer RESTful API 将会显示消息 true。
从实例中捕获私有镜像。
要从一个实例创建一个镜像:
识别链接到这个特定实例的块设备。块设备将磁盘镜像链接到计算实例。
$ export CCI_ID={instance_id_to_be_saved} $ curl -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest/$CCI_ID/getBlockDevices | json_reformat [ { "bootableFlag": 1, "createDate": "2013-10-11T14:00:08+03:00", "
device": "0", "diskImageId": 1813617, "guestId": 2784118, "hotPlugFlag": 0, "id": 3453468, "modifyDate": null, "mountMode": "RW", "mountType": "Disk", "statusId": 1, "uuid": "d7388678-79e9-f72b-44
3a-a8625a724fcd" }, { "bootableFlag": 0, "createDate": "2013-10-11T13:59:01+03:00", "device": "1", "diskImageId": 1813618, "guestId": 2784118, "hotPlugFlag": 0, "id": 3453467, "modifyDate": null, "mountMode": "RW", "mountType": "Disk", "statusId": 1, "uuid": "1c34a98c-1ad2-04a7-01f1-f7689e9938d0" } ]
记下来自第一个条目的 ID (3453468)。
现在您已准备好创建一个归档该实例的块设备的事务请求。该请求有 3 个参数,其中两个是字符串,第三个具有复杂的 SoftLayer_Virtual_Guest_Block_Device 类型。只需在镜像模板中提供前面记下的块设备的 ID (3453468)。
创建一个名为 block.json 的文件并添加以下代码:
{ "parameters":[ "testing-block-devices", [ { "id": 3453468 } ], "This is a block-device-x-y-z" ] }
将该 json 文件 POST 到服务 SoftLayer_Virtual_Guest::createArchiveTransaction:
$ curl -X POST -d @block.json -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest/$CCI_ID/createArchiveTransaction | json_reformat { "createDate": "2013-10-28T12:50:24+03:00", "elapsedSeconds": 0, "guestId": 2784118, "hardwareId": null, "id": 4946901, "modifyDate": "2013-10-28T12:50:24+03:00", "statusChangeDate": "2013-10-28T12:50:24+03:00", "account": { "accountStatusId": null, "allowedPptpVpnQuantity": null, "brandId": null, "claimedTaxExemptTxFlag": null, "createDate": null, "id": null, "isReseller": null, "lateFeeProtectionFlag": null, "modifyDate": null, "statusDate": null }, "transactionGroup": { "averageTimeToComplete": "17.37", "name": "Create Cloud Disk
Template" }, "transactionStatus": { "averageDuration": ".78", "friendlyName": "Create Cloud Disk Template", "name": "CREATE_CLOUD_DISK_TEMPLATE" } }
列出针对您帐户的私有块设备分组,识别事务中使用的块设备。
$ curl -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Account/getPrivateBlockDeviceTemplateGroups | json_reformat
记下您的块设备的 globarIdentifier 字段。它应该类似于:
"globalIdentifier": "c1baca02-abdf-42e5-9326-4b34d4b84fec"
要从保存的镜像创建一个新计算实例,只需在请求中提及 globalIdentifier。创建另一个名为 child-instance.json 的 json 文件并添加以下代码:
{ "parameters": [ { "blockDeviceTemplateGroup": { "globalIdentifier": "c1baca02-abdf-42e5-9326-4b34d4b84fec" }, "localDiskFlag": true, "hourlyBillingFlag": true, "maxMemory": 2048, "startCpus": 2, "domain": "softlayer.com", "hostname": "child-instance-from-template" } ] }
然后 POST 它:
$ curl -X POST -d @child-instance.json -s $SL_API_PUBLIC_ENDPOINT/SoftLayer_Virtual_Guest/createObject | json_reformat { "accountId": 278190, "createDate": "2013-10-28T14:12:31+03:00", "dedicatedAccountHostOnlyFlag": false, "domain": "softlayer.com", "fullyQualifiedDomainName": "child-instance-from-template.softlayer.com", "hostname": "child-instance-from-template", "id": 2842042, "lastPowerStateId": null, "lastVerifiedDate": null, "maxCpu": 2, "maxCpuUnits": "CORE", "maxMemory": 2048, "metricPollDate": null, "modifyDate": null, "startCpus": 2, "statusId": 1001, "globalIdentifier": "d4f8eb3d-f783-4401-b50d-141991c95b54" }
新实例的置备几乎可立即完成。请注意,凭据与用于访问父实例的凭据相同。