如何使用 Ruby 获取所有 SoftLayer 机器的订单用户名和配置日期?

How to get order username and provisionDate for all SoftLayer machines using Ruby?

使用 Ruby 我正在拨打这样的电话:

client = SoftLayer::Client.new(:username => user, :api_key => api_key, :timeout => 999999)
client['Account'].object_mask("mask[id, hostname, fullyQualifiedDomainName, provisionDate, datacenter[name], billingItem[recurringFee, associatedChildren[recurringFee], orderItem[description, order[userRecord[username], id]]], tagReferences[tagId, tag[name]], primaryIpAddress, primaryBackendIpAddress]").getHardware

但只有一些机器 return 一个 provisionDate 并且只有一些 return orderItem 信息。我怎样才能始终如一地获取每台机器的这些信息?什么会导致一台机器 return 此数据而另一台机器不这样做?

示例输出:

{"fullyQualifiedDomainName"=>"<removed_by_me>",
 "hostname"=>"<removed_by_me>",
 "id"=>167719,
 "provisionDate"=>"",
 "primaryBackendIpAddress"=>"<removed_by_me>",
 "primaryIpAddress"=>"<removed_by_me>",
 "billingItem"=>
  {"recurringFee"=>"506.78",
   "associatedChildren"=>
    [<removed_by_me>]},
 "datacenter"=>{"name"=>"dal09"},
  "tagReferences"=>
  [{"tagId"=>139415, "tag"=>{"name"=>"<removed_by_me>"}},
   {"tagId"=>139417, "tag"=>{"name"=>"<removed_by_me>"}},
   {"tagId"=>140549, "tag"=>{"name"=>"<removed_by_me>"}}]}

需要说明的是,大多数机器 return 这个数据,所以我试图理解为什么有些机器没有。

请参阅以下配置步骤,下面是一些需要考虑的流程:

1.  Order a Server

Result: 
* An orderId is assigned to the server
* The createDate has a new value
* activeTransaction value is =  Null
* provisionDate value is = Null

2.  The order is approved

Result: 
* activeTransaction value is <> Null
* provisionDate value = Null

3.  Server  is already provisioned

Result:
* activeTransaction value is = Null
* provisionDate value has a New value
* billingItem property has a new value

要查看您的机器是否还有”activeTransaction”,请执行:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Hardware_Server/[server_id]/getActiveTransaction
Method: GET

现在,在查看您的示例响应后,此服务器在完成配置时遇到了一些问题;出于这个原因,此步骤是手动完成的,但由于任何原因未设置 provisionDate(如果您希望可以设置 provisionDate,请打开工单)。这是一个特例。我可以看到另一台服务器有类似的行为。但是其他没有provisionDate的服务器还有”activeTransaction<>null”(这意味着这些服务器还没有配置)。

编辑:

其他 属性 可以帮助您知道您的机器已经配置,尽管正在执行其他类型的事务,是 “hardwareStatus”,它应该具有“ACTIVE”值。

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Account/getHardware?objectMask=mask[id, hostname, fullyQualifiedDomainName, provisionDate,hardwareStatus]
Method: GET

响应应该是这样的:

{
"fullyQualifiedDomainName": "myhostname.softlayer.com"
"hostname": " myhostname"
"id": 1234567
"provisionDate": "2015-06-29T00:21:39-05:00"
"hardwareStatus": {
"id": 5
"status": "ACTIVE"
}