2016-04-06 7 views
1

昨年オープンしたSLサポートチケットでは、私のチームがBaremetalサーバーにカスタムスクリプトを注文したときに、プロビジョニングプロセス中に新しいBMサーバーに関連付けられたサーバーIDが変更されることがあります。その時点で、私のツールはそのツールを失い、失敗します。このチケットには:REST APIを使用して新しくプロビジョニングしたBareMetalサーバーのステータスを確実に追跡する方法

https://control.softlayer.com/support/tickets/21903245

私はサーバIDの代わりにグローバル識別子を使用する必要があることを言われました。ついにそれを試してみましたが、私は問題を見ています。私がサーバーIDでできるように、最初に要求を提出したときに、グローバルIDを使用して新しいサーバーのハードウェアステータスを照会することはできないようです。

[[email protected] tools]$ curl -k -u chrisr1:<PW> "https://api.softlayer.com/rest/v3/SoftLayer_Hardware/320526/getHardwareStatus.json" 
{"id":3,"status":"DEPLOY"} 

[[email protected] tools]$ curl -k -u chrisr1:<PW> "https://api.softlayer.com/rest/v3/SoftLayer_Hardware/75302613-e55a-481a-829f-967799a41968/getHardwareStatus.json" 
null 

ただし、後で動作します。私は準備が整ったすべてのサーバーに対して同じクエリを実行しました。

私はその上で照会することができる識別子である必要
[[email protected] tools]$ curl -sS -k -u chrisr1:<PW> "https://api.softlayer.com/rest/v3/SoftLayer_Hardware/1ab37f37-9373-4e10-9de4-7319fffcb4f8/getHardwareStatus.json" | json_pp 
{ 
"status" : "ACTIVE", 
"id" : 5 
} 

a)に利用できるすぐに、そして

b)は

感謝を変更しません。

答えて

0

グローバル識別子は、プロビジョニングが完了するまでハードウェアに割り当てられます。このため、要求は「null」値を返します。しかし、サーバーが再割り当てされても変更されない識別子です。

要件に応じてBare Metal Serverを追跡するために使用できる識別子はありません。

ただし、サーバーに割り当てたホスト名によってサーバープロビジョニングを追跡することをお勧めします。あなた があなたのために定義されたサーバのホスト名とserverHostnameを:

  1. https://$user:[email protected]/rest/v3/SoftLayer_Account/getHardware?objectFilter={"hardware":{"hostname":{"operation":"serverHostname"}}} 
    
    Method: Get 
    

    を交換するサーバの情報を取得します。

  2. レスポンスはサーバーの識別子である に関する情報を提供し、サーバーからステータスを確認できます。

    https://$user:[email protected]/rest/v3/SoftLayer_Hardware/123123/getHardwareStatus 
    
    Method: Get 
    

注:あなたは、複数のベアメタルサーバーの同じホスト名を持っていないことを確認する必要があります。

+0

これは私がすでにやっていることのようなものです。問題は、サーバーの識別子が変わる可能性があるため、各Hardware/getHardwareStatusコールの前にAccount/getHardwareコールを実行し続ける必要があると思いますか?それは過剰なネットワークトラフィックのようです。 –

+0

しかし、これはプロビジョニングプロセスを終了する前にサーバーの識別子を取得するための1つのオプションです。サーバーがいつプロビジョニングプロセスを完了したかだけを知りたければ、Raulの提案に従ってください。 –

+0

私はこの解決策を使用して巻き上げました。そのIDが突然IDが存在しないことを示す文字列を返す場合、標準の一意のIDを使用してサーバーのステータスを照会している間に、新しいIDを再度ホスト名からマップし直して、その状況の検査を続行します。理想的ではありませんが、機能します。 –

0

あなたはグローバル識別子が間違っていますが、provisionDateが記入されるまでサーバを繰り返し照会するということは、http://sldn.softlayer.com/reference/services/SoftLayer_Hardware_Server/getObjectメソッドを呼び出し、 "provisionDate"フィールドが入力されているかどうかを確認することですフィールドが入力されていないため、サーバーはまだプロビジョニング中です。プロビジョニングサーバーが完了すると、「provisionDate」フィールドが入力され、サーバーのIDおよびその他のデータも更新されます。したがって、サーバーがまだプロビジョニング中であるか完了しているかを知るために、getHardwareStatusメソッドを呼び出す必要はありません。

+0

これは私が推測することができますが、サーバーがプロビジョニングされる前にgetObject APIにグローバル識別子を渡すことができますか、通常のサーバーIDを引き続き使用する必要がありますか?それが後者なら、それはまったく私を助けません。私が言ったように、それは同じままであることが保証されていないからです。 –

+0

はい、すべてのAPIメソッドで動作するはずです。あなた自身の答えでは、グローバル識別子が働いていることを確認し、サーバーのステータスを返しました。前回のリクエストでnullになったのは、サーバーがまだプロビジョニング中だったからです。サーバーがプロビジョニングされたら、グローバル識別子を使用して任意の要求を実行し、適切な結果を得ることができるはずです –