如何使用 REST API 可靠地跟踪新配置的 BareMetal 服务器的状态

How can I reliably track the status of a newly provisioned BareMetal server using the REST API

在去年打开的 SL 支持票中,我正在寻求解决 SoftLayer 问题的帮助,当我的团队通过一些自定义脚本订购 Baremetal 服务器时,有时,与新 BM 服务器关联的服务器 ID 在配置过程,在这一点上,我的工具失去了对它的跟踪,并且失败了。在这张票中:

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

有人告诉我应该使用全局标识符而不是服务器 ID。我终于抽出时间来测试它,但我看到了一个问题。第一次提交请求时,我似乎无法使用全局标识符查询新服务器的硬件状态,就像我可以使用服务器 ID 一样。

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

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

但是,它稍后会起作用。我 运行 对已准备就绪的服务器进行相同的查询。

[chrisr@ratsy 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) 不会改变

谢谢。

全局标识符分配给硬件,直到提供完成,因此请求 returns "null" 值。但是如果服务器已经重新分配,它是不会改变的标识符。

显然不存在任何可用于根据您的要求跟踪裸机服务器的标识符。

但是,我可以建议通过您分配给服务器的主机名来跟踪您的服务器配置。

  1. 获取服务器信息

    https://$user:$apiKey@api.softlayer.com/rest/v3/SoftLayer_Account/getHardware?objectFilter={"hardware":{"hostname":{"operation":"serverHostname"}}}
    
    Method: Get
    

    将:serverHostname 替换为您指定的服务器主机名 在您的订单中定义。

  2. 响应将提供有关服务器标识符的信息, 然后你可以用它检查服务器的状态。

    https://$user:$apiKey@api.softlayer.com/rest/v3/SoftLayer_Hardware/123123/getHardwareStatus
    
    Method: Get
    

注意:您需要确保没有超过一台具有相同主机名的裸机服务器。

你使用了错误的全局标识符,你的想法是你重复查询服务器直到 provisionDate 被填满,这意味着你调用 http://sldn.softlayer.com/reference/services/SoftLayer_Hardware_Server/getObject 方法并检查 "provisionDate" 字段是否有已填写,如果该字段未填写,则表示服务器仍在配置中。配置服务器完成后,"provisionDate" 字段将被填写,服务器 ID 和其他数据也将被更新。因此,您无需调用 getHardwareStatus 方法即可了解服务器是仍在配置中还是已完成。