2016-04-27 60 views
1

虛擬機創建失敗,出現osDisk錯誤: msrestazure.azure_exceptions.CloudError:不允許更改屬性'osDisk.image.uri'。嘗試使用自定義映像創建映像時,Azure python vm創建失敗

代碼片段如下:

storage_profile=azure.mgmt.compute.models.StorageProfile(
      os_disk=azure.mgmt.compute.models.OSDisk(
       caching=azure.mgmt.compute.models.CachingTypes.none, 
       create_option=azure.mgmt.compute.models.DiskCreateOptionTypes.from_image, 
       name=OS_DISK_NAME, 
       os_type='Linux', 
       vhd=azure.mgmt.compute.models.VirtualHardDisk(
        uri='https://{0}.blob.core.windows.net/vhds/{1}.vhd'.format(
         STORAGE_NAME, 
         OS_DISK_NAME, 
        ), 
       ), 
       image=azure.mgmt.compute.models.VirtualHardDisk(
        uri='https://xxxxxxxxx.blob.core.windows.net/vm-images/Centos67-Azure.vhd' 
       ), 
      ) 

圖像是Python API中定義和定義的URI正常工作與Azure的CLI

API蔚藍== 2.0.0rc3

如果它有助於這項交易被髮送到azure:

url:hps://management.azure.com/subscriptions/b 97ddb69-f825-48b4-9e19-48eb3b4c8267/resourceGroups的/ dev-EU-vnet9-RG /提供商/ Microsoft.Compute/virtualMachines/centos67-API

頭參數:{ '接受語言':「烯美國','Content-Type':'application/json;字符集= UTF-8' , 'X-MS-客戶請求-ID': 'f65196f4-0e3b-11E6-A61B-b499baffc71a'}

體含量:{ '屬性':{ 'storageProfile': {'osDisk':{'osType':'Linux','createOption':'fromImage','name':'centos67-api','caching':'None','vhd':{'uri':' '''','image':{'uri':'https://deveuvnet9rg9944.blob.core.windows.net/vm-images/Centos67-Azure.vhd'}}},'hardwareProfile':{'vmSize':'Standard_DS1'},'osProfile':{'adminUsername':'cloud_user','computerName' :'centos67-api','adminPassword':'xxxxxxxx'},'networkProfile':{'networkInterfaces':[{'id':'/ subscriptions/b97ddb69-f825-48b4-9e19-48eb3b4c8267/resourceGroups/dev-eu -vnet9-rg/providers/Microsoft.Network/networkInterfaces/centos67-api'}]}},'location':'eastus'}

Traceback(最近呼叫的最後一個): 文件「./azure_client.py」,第220行,在 result.wait()#異步操作 文件「/usr/lib/python2.7/site-packages/msrestazure/ azure_operation.py「,第639行,等待 raise self._exception msrestazure.azure_exceptions.CloudError:不允許更改屬性'osDisk.image.uri'。

+0

來自OSDisk的類定義: –

+0

根據REST API [創建或更新虛擬機](https://msdn.microsoft.com/en-us/library/azure/mt163591.aspx)的文檔,請求主體內容不包括'storageProfile'的'osDisk'屬性'image'。 –

回答

0

按照document,類StorageProfile建設中的作用有三個參數包括:image_referenceos_diskdata_disk。代碼中的參數image應該是類azure.mgmt.compute.models.ImageReference,而不是類azure.mgmt.compute.models.VirtualHardDisk

作爲參考,這裏是從document的示例代碼。

storage_profile=azure.mgmt.compute.models.StorageProfile(
    os_disk=azure.mgmt.compute.models.OSDisk(
     caching=azure.mgmt.compute.models.CachingTypes.none, 
     create_option=azure.mgmt.compute.models.DiskCreateOptionTypes.from_image, 
     name=OS_DISK_NAME, 
     vhd=azure.mgmt.compute.models.VirtualHardDisk(
      uri='https://{0}.blob.core.windows.net/vhds/{1}.vhd'.format(
       STORAGE_NAME, 
       OS_DISK_NAME, 
      ), 
     ), 
    ), 
    image_reference = azure.mgmt.compute.models.ImageReference(
     publisher=IMAGE_PUBLISHER, 
     offer=IMAGE_OFFER, 
     sku=IMAGE_SKU, 
     version=IMAGE_VERSION, 
    ), 
) 

希望它有幫助。 任何問題,請隨時讓我知道。

+0

ImageReference用於使用來自Azure Store的已發佈圖像,而不是用於上傳自定義圖像的Azure。這很好。不幸的是,我需要使用我們創建並上傳的定製圖像 –

+0

這是OSDisk定義的一部分。看看定義圖像 類OSDisk(模型): 「」」 描述了操作系統磁盤 ... :PARAM形象:獲取或設置源用戶圖像VirtualHardDisk這 VirtualHardDisk將被複制。之前使用它附加到虛擬 Machine.If SourceImage設置,目的地VirtualHardDisk 不應存在 :類型圖像:類:'VirtualHardDisk ' .. 。 –

0

問題已解決。原來,返回的錯誤有點令人誤解。問題是目標磁盤已經存在,因此無法修改(即更改屬性錯誤)。

一旦目標具有唯一名稱,該過程就可以正常工作,並且可以從我的自定義映像創建虛擬機。