如何为Azure虚拟机创建数据磁盘?

4
我使用以下 JSON 模板创建虚拟机时,已添加多个数据磁盘到虚拟机中。
"variables": {  
"diskArray": [  
{  
"name": "datadisk1",
"lun": 0,   
"vhd": {  
"uri": "[concat('http://', variables('storageAccountName'),'.blob.core.windows.net/vhds/','datadisk1.vhd')]"  
        },  
        "createOption": "Empty",    
        "caching": "ReadWrite",    
        "diskSizeGB": 300    
      },    
      {    
        "name": "datadisk2",
        "lun": 1,
        "vhd": {
          "uri": "[concat('http://', variables('storageAccountName'),'.blob.core.windows.net/vhds/', 'datadisk2.vhd')]"    
        },  
        "createOption": "Empty",    
        "caching": "ReadWrite",    
        "diskSizeGB": 200  
      },  
      {   
        "name": "datadisk3",  
        "lun": 2,  
        "vhd": {  
          "uri": "[concat('http://', variables('storageAccountName'),'.blob.core.windows.net/vhds/', 'datadisk3.vhd')]"  
        },  
        "createOption": "Empty",  
        "caching": "ReadWrite",  
        "diskSizeGB": 100  
      }  
]    
  },    
.....    
.....   
"resources": [  
    {  
      "apiVersion": "2015-06-15",  
      "type": "Microsoft.Compute/virtualMachines",  
      "name": "[concat(parameters('VmPrefix'), copyindex(1))]",  
      "copy": {  
        "name": "Datanode",  
        "count": "[variables('vmcount')]"  
      },  
      "location": "[resourceGroup().location]",  
      "properties": {  
         ......  
         ......  
        "storageProfile": {  
          "imageReference": {  
            ........  
          },  
          "dataDisks":   "[take(variables('diskArray'),parameters('numDataDisks'))]",  
          "osDisk": {  
            .......  
          }  
        }  
    }  
}  
]  

这段代码在创建单个虚拟机时运行良好,但在创建多个虚拟机时失败。这是因为为第一台机器创建的数据磁盘的vhd与其他机器相同。

有没有一种方法可以创建具有不同名称的vhd?尝试传递copy index,但不起作用。

1个回答

2
当然可以,我会粘贴一个链接到一个模板,该模板可以实现这个功能,并解释它的工作原理。这是链接
为了实现这一点,您必须将copyindex(或类似的内容)添加到磁盘名称中,其中一种方法是使用嵌套模板返回包含磁盘的对象,在调用模板时,您可以将copyindex用作其参数之一。 这里创建嵌套部署以创建磁盘对象。
这里则使用输出来创建磁盘。

在运行上述示例JSON时,我遇到了以下错误:New-AzureRmResourceGroupDeployment:对象引用未设置为对象的实例。 在第1行第13个字符处:
  • $response = New-AzureRmResourceGroupDeployment -ResourceGroupName $ResourceGroup ...
  • + CategoryInfo : CloseError: (:) [New-AzureRmResourceGroupDeployment], NullReferenceException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupDeploymentCommand
- s p
但是虚拟机已经正确地创建并附带数据磁盘。 - s p
1
嗯,我不确定你做错了什么,对我来说这个很好用。如果这符合你的要求,请接受它作为答案 ;) 我刚刚测试了这个部署,它正常工作。 New-AzureRmResourceGroupDeployment -Name test -ResourceGroupName zxc -TemplateUri https://raw.githubusercontent.com/4c74356b41/armotron/master/ml-vm-ml-dd.json - 4c74356b41
已将Azure PowerShell模块更新至最新版本3.6.0,解决了我的问题。我已将此标记为答案,因为虚拟机已成功创建并附带数据磁盘。 - s p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接