Как получить имя пользователя и дату заказа для всех машин SoftLayer с помощью 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

Но только некоторые машины возвращают provisionDate и только некоторые возвращают информацию orderItem. Как я могу постоянно получать эту информацию для каждой машины? Что может привести к тому, что одна машина вернет эти данные, а другая нет?

Пример вывода:

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

Чтобы было ясно, большинство машин возвращают эти данные, поэтому я пытаюсь понять, почему некоторые этого не делают.


person haunm    schedule 22.03.2016    source источник
comment
ProvisionDate заполняется после завершения процесса инициализации. Таким образом, машины, у которых нет даты предоставления, все еще находятся в процессе подготовки. Что касается странного элемента заказа, пожалуйста, проверьте, находятся ли эти машины в процессе инициализации или в процессе отмены.   -  person Nelson Raul Cabero Mendoza    schedule 23.03.2016


Ответы (1)


Пожалуйста, ознакомьтесь со следующими этапами подготовки, ниже приведен небольшой порядок действий:

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, есть еще ”activeTransaction<>null” (это означает, что эти сервера еще не подготовлены).

ИЗМЕНИТЬ:

Другое свойство может помочь вам узнать, что ваша машина уже подготовлена, хотя выполняется другой тип транзакции, это “hardwareStatus”, оно должно иметь значение «АКТИВНО».

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"
}
person mcruz    schedule 22.03.2016
comment
Спасибо, mcruz. На самом деле это много полезной информации. Один вопрос: может ли поле activeTransaction быть НЕ равным нулю после инициализации машины? Мне интересно, есть ли другие случаи, когда происходят транзакции. Если есть, есть ли у вас другое поле, которое вы рекомендуете использовать, которое является хорошим индикатором того, что машина подготовлена ​​(надежное поле), может быть, primaryBackendIpAddress? - person haunm; 23.03.2016
comment
Другое свойство может помочь вам узнать, что ваш компьютер уже подготовлен, хотя выполняется транзакция другого типа, это “hardwareStatus”, оно должно иметь значение «АКТИВНО». Я добавил некоторую информацию в раздел EDIT ответа. - person mcruz; 23.03.2016