2016-03-22 8 views
0

私は次のようにコールを作ってるんだルビーを使用して:Rubyを使用しているすべてのSoftLayerマシンの注文usernameとprovisionDateを取得するには?

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 

しかし、唯一のいくつかのマシンがprovisionDateと一部だけリターンのOrderItem情報を返します。この情報を各マシンで一貫して取得するにはどうすればよいですか? 1つのマシンがこのデータを返し、別のマシンを返させる原因は何ですか?

出力例:

{"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>"}}]} 

明確にするため、私はいくつかがいない理由を理解しようとしているので、ほとんどのマシンでは、このデータを返します。

+0

終了されました:

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

応答は次のようなものでなければなりません。したがって、日付が定められていないマシンは、引き続きプロビジョニング中です。異常な注文の場合は、それらのマシンがプロビジョニング中かcancelaciónproccess中にあるかどうかを確認してください。 –

答えて

0

以下を検討するために少し流れで、次のプロビジョニング手順を参照してください:あなたのマシンがまだ”activeTransaction”を持っている場合

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 

表示するには、実行してください:

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

を今、検討した後、あなたのプロビジョニングの完了時にこのサーバーにいくつかの問題がありました。そのため、この手順は手動で完了しましたが、何らかの理由でprovisionDateが設定されていませんでした(provisionDateを設定できるようにするにはチケットを開いてください)。これは特別なケースです。別のサーバーにも同様の動作があることがわかります。しかし、provisionDateを持たない他のサーバーは、まだ”activeTransaction<>null”(これらのサーバーはまだプロビジョニングされていないことを意味します)を持っています。

EDIT:

その他のプロパティは、トランザクションの他の種類が実行されているが、あなたのマシンがすでにプロビジョニングされていることを知っているあなたを助けることができる、それが「ACTIVE」の値を持つ必要があり、“hardwareStatus”です。 provisionDateは、プロビジョニング・プロセスへ一度満たされる

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

ありがとうmcruz。これは実際には多くの有用な情報です。 1つの質問は、マシンがプロビジョニングされた後、activeTransactionフィールドがnullに等しくないことがありますか?私はトランザクションが発生する他のケースがあるかどうか疑問に思っています。存在する場合は、マシンがプロビジョニングされた(信頼できるフィールド)、おそらくprimaryBackendIpAddressという良い指標であることをお勧めする別のフィールドがありますか? – haunm

+0

他の種類のトランザクションは実行されていますが、あなたのマシンがすでにプロビジョニングされていることを知るのに役立つ他のプロパティは、 '' hardwareStatus ''であり、" ACTIVE "値を持つ必要があります。答えの** EDIT **セクションにいくつかの情報を追加しました。 – mcruz

関連する問題