2016-10-05 1 views
0

Ich habe eine Softlayer VM mit einer benutzerdefinierten Bildvorlage erstellt. Ich bin in der Lage, SAN-Festplatten zu meinem vm mit curl hinzufügen, aber ich bin nicht erfolgreich versuchen, dies mit der Python SoftLayer-Bibliothek zu tun. Ich erhalte den folgenden Fehler:Verwenden von SoftLayer Python API placeOrder zum Hinzufügen von Festplatten zu vm

SoftLayer.exceptions.SoftLayerAPIError: SoftLayerAPIError(SoftLayer_Exception_Order_InvalidContainer): Invalid container specified: SoftLayer_Container_Product_Order. Ordering a server or service requires a specific container type, not the generic base order container. 

Hier ist mein Code:

self.client = SoftLayer.Client(username='[email protected]', api_key='key') 
console_id = 11111111 

order = { 
     "parameters": [{ 
      "virtualGuests": [{"id": console_id}], 
      "prices": [{ 
       "id": 113031, 
       "categories": [{ 
        "categoryCode": "guest_disk1", 
        "complexType": "SoftLayer_Product_Item_Category" 
       }], 
       "complexType": "SoftLayer_Product_Item_Price" 
      }, 
       { 
        "id": 112707, 
        "categories": [{ 
         "categoryCode": "guest_disk2", 
         "complexType": "SoftLayer_Product_Item_Category" 
        }], 
        "complexType": "SoftLayer_Product_Item_Price" 
       } 
      ], 
      "properties": [ 
       {"name": "NOTE_GENERAL", "value": "adding disks"}, 
       {"name": "MAINTENANCE_WINDOW", "value": "now"} 
      ], 
      "complexType": "SoftLayer_Container_Product_Order_Virtual_Guest_Upgrade" 
     }] 
    } 

# response = self.client['Product_Order'].placeOrder(order, False)   
response = self.client.call('Product_Order', 'placeOrder', order) 

print response 

Wenn ich den folgenden curl Befehl jedoch meine vm Updates sind erfolgreich laufen:

curl -X POST --data @updatefile https://myusername%40email%2Ecom:[email protected]/rest/v3.1/SoftLayer_Product_Order/placeOrder 

Inhalt der Updatedatei:

{ 
"parameters": [{ 
    "virtualGuests":[{"id":11111111}], 
    "prices": [{ 
     "id": 113031, 
     "categories": [{ 
      "categoryCode": "guest_disk1", 
      "complexType": "SoftLayer_Product_Item_Category" 
     }], 
     "complexType": "SoftLayer_Product_Item_Price" 
    }, 

    { 
     "id": 112707, 
     "categories": [{ 
      "categoryCode": "guest_disk2", 
      "complexType": "SoftLayer_Product_Item_Category" 
     }], 
     "complexType": "SoftLayer_Product_Item_Price" 
    } 
    ], 
    "properties": [ 
    {"name": "NOTE_GENERAL","value": "adding disks"}, 
    {"name": "MAINTENANCE_WINDOW","value": "now"} 
    ], 
    "complexType": "SoftLayer_Container_Product_Order_Virtual_Guest_Upgrade" 
}] 
} 

Irgendeine Idee, was ich falsch mache?

Antwort

0

yep, weil, wenn Sie den Python-Client des Softlayers verwenden, müssen Sie nicht die "paramters" -Eigenschaft in Ihrer Bestellung angeben, die nur für RESTful-Anfrage ist, entfernen Sie es und es sollte funktionieren.

Versuchen Sie folgendes:

self.client = SoftLayer.Client(username='[email protected]', api_key='key') 
console_id = 11111111 

order = { 
      "virtualGuests": [{"id": console_id}], 
      "prices": [{ 
       "id": 113031, 
       "categories": [{ 
        "categoryCode": "guest_disk1", 
        "complexType": "SoftLayer_Product_Item_Category" 
       }], 
       "complexType": "SoftLayer_Product_Item_Price" 
      }, 
       { 
        "id": 112707, 
        "categories": [{ 
         "categoryCode": "guest_disk2", 
         "complexType": "SoftLayer_Product_Item_Category" 
        }], 
        "complexType": "SoftLayer_Product_Item_Price" 
       } 
      ], 
      "properties": [ 
       {"name": "NOTE_GENERAL", "value": "adding disks"}, 
       {"name": "MAINTENANCE_WINDOW", "value": "now"} 
      ], 
      "complexType": "SoftLayer_Container_Product_Order_Virtual_Guest_Upgrade" 
    } 

response = self.client['Product_Order'].placeOrder(order)   


print response 

Grüße

Verwandte Themen