Как я могу надежно отслеживать состояние недавно подготовленного сервера BareMetal с помощью REST API

В заявке на поддержку SL, открытой в прошлом году, я искал помощь в решении проблемы SoftLayer, когда, когда моя команда заказывает серверы Baremetal с помощью некоторых пользовательских сценариев, иногда идентификатор сервера, связанный с новым сервером BM, изменяется во время процесса инициализации, и в в этот момент мои инструменты теряют его из виду и терпят неудачу. В этом билете:

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

Мне сказали, что я должен использовать глобальный идентификатор вместо идентификатора сервера. Я, наконец, дошел до тестирования, но я вижу проблему. Казалось бы, я не могу запросить состояние оборудования нового сервера, используя глобальный идентификатор, когда я впервые отправил запрос, как я могу с идентификатором сервера.

[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
}

Мне нужен идентификатор, который я могу запросить, это:

а) доступны сразу и

б) не изменится

Спасибо.


person Chris Ratcliffe    schedule 06.04.2016    source источник


Ответы (2)


Глобальный идентификатор назначается оборудованию до тех пор, пока предоставление не будет завершено, по этой причине запрос возвращает «нулевое» значение. Но это идентификатор, который не изменится, если сервер будет переназначен.

По-видимому, не существует никакого идентификатора, который вы можете использовать для отслеживания Bare Metal Servers в соответствии с вашими требованиями.

Тем не менее, я могу порекомендовать отслеживать подготовку вашего сервера через имя хоста, которое вы назначили серверу.

  1. Получение информации о сервере

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

    Замените: serverHostname на имя хоста сервера, которое вы указали в своем заказе.

  2. В ответе будет информация об идентификаторе сервера, после чего вы сможете проверить статус с сервера.

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

Примечание. Необходимо убедиться, что у вас не более одного физического сервера с одинаковым именем хоста.

person Ruber Cuellar Valenzuela    schedule 06.04.2016
comment
Это то, что я уже делаю. Проблема в том, что идентификатор сервера может измениться, поэтому я думаю, мне нужно продолжать выполнять вызов Account/getHardware перед каждым вызовом Hardware/getHardwareStatus? Это похоже на избыточный сетевой трафик. - person Chris Ratcliffe; 06.04.2016
comment
Да, но это один из способов получить идентификатор сервера до того, как он завершит процесс подготовки. Если вы хотите знать только, когда сервер завершил процесс подготовки, вы должны следовать предложению Рауля. - person Ruber Cuellar Valenzuela; 06.04.2016
comment
Я закончил использовать это решение. При запросе состояния сервера с использованием стандартного уникального идентификатора, если этот идентификатор внезапно возвращает строку, указывающую на то, что идентификатор не существует, я пытаюсь снова переназначить новый идентификатор из имени хоста и продолжить проверку его состояния. Это не идеально, но это работает. - person Chris Ratcliffe; 19.04.2016

Вы используете неправильный глобальный идентификатор, идея заключается в том, что вы повторно запрашиваете сервер, пока не будет заполнена provisionDate, это означает, что вы вызываете http://sldn.softlayer.com/reference/services/SoftLayer_Hardware_Server/getObject и проверьте, заполнено ли поле "provisionDate", если поле не заполнено. это означает, что сервер все еще находится в процессе подготовки. После завершения подготовки сервера поле «provisionDate» будет заполнено, а также будут обновлены идентификатор сервера и другие данные. Таким образом, вам не нужно вызывать метод getHardwareStatus, чтобы узнать, находится ли сервер в процессе подготовки или завершен.

person Nelson Raul Cabero Mendoza    schedule 06.04.2016
comment
Я думаю, это сработает, но могу ли я передать глобальный идентификатор API getObject до того, как сервер будет подготовлен, или мне нужно продолжать использовать обычный идентификатор сервера? Если второе, то мне это совсем не помогает, потому что, как я уже сказал, не гарантируется, что это останется прежним. - person Chris Ratcliffe; 06.04.2016
comment
да, вы можете, это должно работать для всех методов API. В своем собственном ответе вы подтвердили, что глобальный идентификатор сработал и вернул статус сервера. Причина, по которой вы ранее получили null в своем запросе, заключалась в том, что сервер все еще находился в процессе подготовки. После того, как сервер подготовлен, вы сможете выполнить любой запрос, используя глобальный идентификатор, и получить правильный результат. - person Nelson Raul Cabero Mendoza; 06.04.2016