使用PowerShell Azure Resource Manager cmdlet

时间:2015-07-16 11:18:06

标签: powershell azure azure-resource-manager

注意:这是Azure ARM问题 - 而不是Azure服务管理问题。

我在存储帐户中有2个vhds - machine-os.vhd和machine-data.vhd。我可以使用PowerShell ARM cmdlet创建具有现有OS vhd的VM,但无法弄清楚如何附加EXISTING数据vhd。我找到的所有示例都创建了EMPTY数据磁盘 - 但我想将现有的vhd作为数据磁盘附加。

我尝试将createOption attach开关与Add-AzureVMDataDisk一起使用,如下所示:

$vm = New-AzureVMConfig ... $vm = Add-AzureVMDataDisk -VM $vm -VhdUri $existingDiskUri -Name "machine-data.vhd" -Caching ReadOnly -CreateOption attach -DiskSizeInGB 200

然而,操作失败了:

Blob https://x.blob.core.windows.net/vhds/machine-data.vhd already exists. Please provide a different blob URI to create a new blank data disk 'machine-data.vhd.'

我必须为DiskSizeInGB命令指定Add-AzureVMDataDisk才能工作(这看起来很奇怪)。我已经尝试为SourceImageUriVhdUri指定一个不同的名称,根据documentation,它应该将vhd从sourceImageUri复制到vhdUri并附加它。尝试createOption fromImage失败,因为“您无法使用源图像uri指定大小”。但是,cmdlet的size参数是必需的,因此我不知道如何指定sourceUri而不是大小。

This SO question提出了类似的问题(虽然我没有得到相同的错误),但答案中的链接显示了一个带有EMPTY数据磁盘的模板,但没有帮助。

有趣的是,我尝试从Azure门户将磁盘添加到VM中 - 您必须指定名称和URI,但操作总是失败并出现一些奇怪的json解析错误。我似乎无法正确获取数据磁盘的uri。

1 个答案:

答案 0 :(得分:0)

在玩了一下之后我发现了一个黑客:

  1. 为现有磁盘提供新URI,并将其设置为vhdUri
  2. 使用现有磁盘的URI作为sourceImageUri
  3. 使用Add-AzureVMDataDisk
  4. 致电CreateOption fromImage
  5. 将数据磁盘的大小设置为null (这是黑客攻击)
  6. 调用New-AzureVM时,现有磁盘将复制到新的Uri
  7. 创建VM后,删除原来的vhd
  8. 不幸的是,您必须向DiskSizeInGB命令提供Add-AzureVMDataDisk参数,因为它是强制性的。但是,我将其设置为null,否则配置失败(错误消息表明您无法指定size和sourceImageUri)。

    这是最终的代码:

    $vm = New-AzureVMConfig ...
    $vm = Add-AzureVMDataDisk -VM $vm `
          -SourceImageUri $existingDataDiskUrl -VhdUri $newDataDiskUri `
          -Name $newDataDiskName -CreateOption fromImage -Caching ReadOnly `
          -DiskSizeInGB 200
    
    # hack
    $vm.StorageProfile.DataDisks[0].DiskSizeGB = $null
    

    之后你可以打电话:     New-AzureVM -ResourceGroupName $ rgName -Location $ location -VM $ vm

    创建虚拟机后,我呼叫Remove-AzureStorageBlob删除原始磁盘。

    也许有一种更清洁的方式,但我找不到。至少这种方式最终有效。

相关问题