我正在尝试创建一个ARM模板,允许我部署可能需要或不需要其他数据磁盘的VM。但是,当我测试我的模板时,我得到以下错误。
奇怪的是,如果vmDataDisk参数的值为0或1,则所有参数都完美无缺。如果该参数的大于1,我会得到以下错误。
例如,以下工作很有用:vmDataDisk = 1和vmDataDiskSizesInGb = 30
但是,以下值会抛出以下错误:vmDataDisk = 3,vmDataDiskSizesInGb = 10,20,30
"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."
}
}
}
"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"
}
}
}
]
}
"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": {}
}
}
]
代码:InvalidTemplate
消息:部署模板语言 表达式评估失败:'语言表达式属性'0' 无法评估。'。请参阅 https://aka.ms/arm-template-expressions了解使用详情。
详情:
答案 0 :(得分:0)
错误表示无法评估模板中使用的语言表达式。换句话说,您使用的语言表达式不符合模板的规则。而错误的表达式属性为'0'。
因此,与错误发布的文档https://aka.ms/arm-template-expressions相比,您应检查属性为“0”的所有表达式。
<强>更新强>
在你发布的模板代码中,参数“vmDataDiskSizesInGb”类型是字符串,你的“defaultValue”是0,它不正确,你应该给它“0”。
但我不确定您是否还有其他错误,因此我建议您检查所有表达式,并将错误发布的文档https://aka.ms/arm-template-expressions与错误发布的文档{0}进行比较。