Azure ARM copyIndex()

时间:2018-05-23 19:45:46

标签: json azure azure-virtual-machine arm-template

我正在尝试创建一个ARM模板,允许我部署可能需要或不需要其他数据磁盘的VM。但是,当我测试我的模板时,我得到以下错误。

奇怪的是,如果vmDataDisk参数的值为0或1,则所有参数都完美无缺。如果该参数的大于1,我会得到以下错误。

例如,以下工作很有用:vmDataDisk = 1和vmDataDiskSizesInGb = 30

但是,以下值会抛出以下错误:vmDataDisk = 3,vmDataDiskSizesInGb = 10,20,30

参数元素 - ARM json

  "parameters": {
    ...
    "vmDataDisks": {
      "type": "int",
      "defaultValue": 0,
      "allowedValues": [
        0,
        1,
        2,
        3,
        4,
        5
      ],
      "metadata": {
        "description": "Select the number of data disks (in addition to OS disk) needed for this VM."
      }
    },
    "vmDataDiskSizesInGb": {
      "type": "string",
      "defaultValue": 0,
      "metadata": {
        "description": "Enter string of comma separated values for the size of each data disk. For example, if the VmDataDisks parameter is set to '3', the VmDataDiskSizesInGb parameter might have a value of '10,25,50' and the template will deploy 3 data disks that are 10, 25 and 50 GB in size respectively."
      }
    }
  }

变量元素 - ARM json

"variables": {
    ...
    "diskSizes":  "[split(parameters('vmDataDiskSizesInGb'), ',')]",
    "copy": [
      {
        "name": "dataDisks",
        "count": "[if(equals(parameters('vmDataDisks'),0), 1, parameters('vmDataDisks'))]",
        "input": {
          "name": "[concat(parameters('vmName'), '_DataDisk_', copyIndex('dataDisks'))]",
          "lun": "[copyIndex('dataDisks')]",
          "createOption": "Empty",
          "diskSizeGB": "[if(equals(parameters('vmDataDisks'),0), 1, int(variables('diskSizes')[copyIndex()]))]",
          "caching": "[if(startsWith(parameters('vmType'), 'SQL'), 'ReadOnly', 'None')]",
          "managedDisk": {
            "storageAccountType": "Premium_LRS"
          }
        }
      }
    ]
  }

资源元素 - ARM json

"resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "apiVersion": "2017-03-30",
      "location": "[parameters('location')]",
      "dependsOn": [],
      "properties": {
        "hardwareProfile": {},
        "osProfile": {},
        "storageProfile": {
          "imageReference": {},
          "osDisk": {},
          "dataDisks": "[if(equals(parameters('vmDataDisks'),0), json('null'), variables('dataDisks'))]"
        },
        "networkProfile": {},
        "diagnosticsProfile": {}
      }
    }
  ]

Test-AzureRmResourceGroupDeployment错误

  

代码:InvalidTemplate
消息:部署模板语言   表达式评估失败:'语言表达式属性'0'   无法评估。'。请参阅   https://aka.ms/arm-template-expressions了解使用详情。
详情:

1 个答案:

答案 0 :(得分:0)

错误表示无法评估模板中使用的语言表达式。换句话说,您使用的语言表达式不符合模板的规则。而错误的表达式属性为'0'。

因此,与错误发布的文档https://aka.ms/arm-template-expressions相比,您应检查属性为“0”的所有表达式。

<强>更新

在你发布的模板代码中,参数“vmDataDiskSizesInGb”类型是字符串,你的“defaultValue”是0,它不正确,你应该给它“0”。

但我不确定您是否还有其他错误,因此我建议您检查所有表达式,并将错误发布的文档https://aka.ms/arm-template-expressions与错误发布的文档{0}进行比较。