-1

私は基本的に、ベアメタル サーバーで EVault を注文するためにここに投稿された内容に従っています: SoftLayer で EVault バックアップを注文するためのサンプル コード

仮想ゲストでは機能しますが、ベア メタル サーバーでは verifyOrder 呼び出しで失敗し、次のようなエラー メッセージが表示されます。

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

これは私が持っている入力の種類であり、指定されたハードウェアは 1 つしかありません。正確に 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 コードです。(最初の require ステートメントをいくつか削除しました)。これは 1 時間ごとのベア メタル サーバーを参照しており、サンプルに示されているすべてのデータは $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
}
4

1 に答える 1

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

編集

ただし、注文にまだエラーがある場合は、考えられる他の種類の問題を確認する必要があります。たとえば、そのうちの 1 つは、使用しているバー メタルの問題である可能性があります。注文を停止するアクティブなトランザクションが実行されている可能性があるかどうかを確認できます。このサーバーにアクティブなトランザクションがあるかどうかを取得するには、次を実行します。

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"
}-
}
于 2016-01-15T16:51:37.653 に答える