2016-01-15 1 views
-1

я в основном после того, что было размещено здесь, чтобы заказать EVault на пустом сервере металла: Sample code for ordering an EVault backup in SoftLayerEVault порядок на сервере Bare Metal завершается с ошибкой

Он работает для виртуальных гостей, но не работает на сервере Bare Metal на verifyOrder вызова с сообщением об ошибке, как это:

There was an error querying the SoftLayer API: EVault orders must be tied to exactly 1 server. 

Это своего рода вход, который у меня есть, и у меня есть только определенные 1 аппаратное обеспечение, и я не понимаю, почему он думает, что у меня нет ровно один сервер.

stdClass Object 
(
    [location] => 168642 
    [packageId] => 0 
    [prices] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 22747 
       ) 

     ) 

    [quantity] => 1 
    [useHourlyPricing] => 
    [hardware] => Array 
     (
      [0] => stdClass Object 
       (
        [id] => 168137 
       ) 

     ) 
) 

Это код PHP, который я использую для тестирования. (Я удалил некоторые начальные запросы). Это ссылки на почасовой пустой сервер металла и все данные, указанные в образце реальны для $ apiUsername и $ apiKey за исключением:

<?php 
$apiUsername = 'xxxxx'; 
$apiKey = 'xxxxx'; 

$hardware = new stdClass(); 
$hardware->id = 168137; 

$orderHardware = array 
(
    $hardware 
); 

# The location for the Evault 
$location = "168642"; 
$packageId = 0; 
$quantity = 1; 

$prices = array 
(
    22747, 
); 

// Convert our item list into an array of skeleton 
$orderPrices = array(); 

foreach ($prices as $priceId) { 
    $price = new stdClass(); 
    $price->id = $priceId; 
    $orderPrices[] = $price; 
} 

// Build a SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault object containing 
// the order you wish to place. 
$orderTemplate = new stdClass(); 
$orderTemplate->location   = $location; 
$orderTemplate->packageId  = $packageId; 
$orderTemplate->prices   = $orderPrices; 
$orderTemplate->quantity   = $quantity; 
$orderTemplate->useHourlyPricing = false; 
$orderTemplate->hardware = $orderHardware; 

print_r($orderTemplate); 

// Place the order. 
try { 
    // Re-declare the order template as a SOAP variable, so the SoftLayer 
    // ordering system knows what type of order you're placing. 
    $orderTemplate = new SoapVar 
    (
      $orderTemplate, 
      SOAP_ENC_OBJECT, 
      'SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault', 
      'http://api.service.softlayer.com/soap/v3/' 
    ); 

    $softLayer_product_order = SoftLayer_SoapClient::getClient('SoftLayer_Product_Order', null, $apiUsername, $apiKey); 
    $receipt = $softLayer_product_order->verifyOrder($orderTemplate); 
    print_r($receipt); 
} catch (Exception $e) { 
    echo 'Unable to place server order: ' . $e->getMessage(); 
} 
?> 

Это голый металл сервер (168137) данные, которые я собираю, делая

GET https://api.softlayer.com/rest/v3/SoftLayer_Hardware/168137/getObject.json?objectMask=activeTransaction.transactionGroup 

{ 
    "accountId" : 79###, 
    "bareMetalInstanceFlag" : 0, 
    "domain" : "x.net", 
    "fullyQualifiedDomainName" : "x.x.net", 
    "globalIdentifier" : "2###-##a-4#7-a##6-ed##5", 
    "hardwareFunction" : { 
     "code" : "WEBSVR", 
     "description" : "Web Server", 
     "id" : 3 
    }, 
    "hardwareStatus" : { 
     "id" : 5, 
     "status" : "ACTIVE" 
    }, 
    "hardwareStatusId" : 5, 
    "hostname" : "xxxxx", 
    "id" : 168137, 
    "managedResourceFlag" : false, 
    "manufacturerSerialNumber" : "S0#####2009275E", 
    "networkManagementIpAddress" : "10.##.###.###", 
    "notes" : "", 
    "primaryBackendIpAddress" : "10.##.###.###", 
    "primaryIpAddress" : "198.##.###.###", 
    "privateIpAddress" : "10.##.###.###", 
    "provisionDate" : "2016-01-15T09:20:55-06:00", 
    "serialNumber" : "ASL####", 
    "serviceProviderId" : 1, 
    "serviceProviderResourceId" : 168137 
} 
+0

первая ваша с помощью PHP, было бы хорошей идеей пасты ваш код, чтобы взглянуть, во-вторых, вы попробовали пример Rest, который mcruz отправил вам? –

+0

Я обновил свой вопрос с помощью тестового кода, который я использую. Пожалуйста, просмотрите и узнайте, есть ли какие-либо проблемы, и, пожалуйста, дайте мне знать, если вы что-то увидите. Благодарю. – KHP

+0

Код работает отлично для меня. Если у вас все еще есть проблемы с этим, я рекомендую вам отправить билет в Softlayer, что-то может быть неправильным в вашей учетной записи. –

ответ

0

Вы правы, дополнительные атрибуты «networkType» и «numOfTabs» являются причиной этой ошибки.

Ошибки отображаются с помощью этих атрибутов:

{ 
"error": "The property 'networkType' is not valid for 'SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault'." 
"code": "SoftLayer_Exception_Public" 
} 

{ 
"error": "The property 'numOfTabs' is not valid for 'SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault'." 
"code": "SoftLayer_Exception_Public" 
} 

Если вы удалите их, то заказ будет успешно работать.

Ниже приведен пример REST удаление этих атрибутов:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Product_Order/verifyOrder.json 

Method: POST 

{ 
    "parameters": [ 
    { 
    "complexType" : "SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault", 
    "hardware" : [ 
     { 
     "id" : "149654", 
     "notes" : "Bare Metal" 
     } 
    ], 
    "location" : "449500", 
    "packageId" : 0, 
    "prices" : [ 
     { 
     "id" : "83867" 
     } 
    ], 
    "quantity" : 1, 
    "useHourlyPricing" : 0 
} 
    ] 
} 

рекомендации:

http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order_Network_Storage_Backup_Evault_Vault

EDIT

Но если заказ стил У меня есть ошибки, нам нужно рассмотреть другие возможные проблемы. Например, одна из них может быть проблемой с металлическим стержнем, который мы используем. Мы можем проверить, может ли быть активная транзакция, которая останавливает наш заказ. Для того, чтобы получить, если этот сервер имеет активные транзакции, выполнить:

https://[username]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Hardware/149654/getObject?objectMask=activeTransaction.transactionGroup 

Method: GET 
where: “149654” is the Hardware_id. 

Если Бар металл имеет активную транзакцию, то результат покажет что-то вроде этого:

"serviceProviderResourceId": 149654 
"globalIdentifier": "aaaaaa-aaaa-aaaa-8851-c3c68f764a4e" 
"hardwareFunction": { 
"code": "WEBSVR" 
"description": "Web Server" 
"id": 3 
}- 
"hardwareStatus": { 
"id": 8 
"status": "RECLAIM" 
}- 
"managedResourceFlag": false 
"networkManagementIpAddress": "11.11.11.11" 
"primaryBackendIpAddress": "10.44.44.44" 
"primaryIpAddress": "50.50.50.50" 
"activeTransaction": { 
"createDate": "2016-01-15T08:54:04-06:00" 
"elapsedSeconds": 10328 
"guestId": null 
"hardwareId": 149654 
"id": 1234567 
"modifyDate": "2016-01-15T12:45:31-06:00" 
"statusChangeDate": "2016-01-15T10:07:22-06:00" 
"transactionGroup": { 
"averageTimeToComplete": "641.64" 
"name": "Reclaim Server" 
}- 
"transactionStatus": { 
"averageDuration": "162.31" 
"name": "XX_ERASEDRIVES" 
}- 
} 
+0

Я обновил вопрос с помощью нового ввода, который я удалил из дополнительных атрибутов. Тем не менее у меня все еще возникает проблема. – KHP

+0

@KHP, в настоящий момент barmetal с id = 149654 имеет активную транзакцию, по этой причине заказ не может быть успешно выполнен. Пожалуйста, см. EDIT в ответе, чтобы получить активную транзакцию с использованием запроса. Надеюсь, это вам поможет.С уважением – mcruz

+0

О? Когда он станет каким-то другим государством? или какое состояние оно должно быть и как я могу установить его в это состояние? – KHP