我知道可以选择对属性值进行条件输出,但是是否可以拥有条件属性本身。例如,我有一个创建
Microsoft.Compute/VirtualMachine
的模板,它对于 Windows 和 Linux 都是相同的模板。但对于 Windows,我需要指定 Linux 不存在的属性 ("licenseType": "Windows_Server")
。存在此属性将导致部署失败,并出现错误 The property 'LicenseType' cannot be used together with property 'linuxConfiguration'
我想弄清楚是否可以仅针对 Windows 图像包含此属性,同时保持模板相同?
是的,这是可能的,但是很hacky。几个选项:
让我扩展一下第二点:
"variables": {
"baseObject": {
"propertyOne": "xxx",
"propertyTwo": "yyy"
},
"additionalObject": {
"optionalProperty": "zzz"
}
}
然后在你的对象中你可以这样做:
"property": "[if(something, variables('baseObject'), # new line for readability
union(variables('baseObject'), variables('additionalObject') ))]"
这是我根据之前的答案和评论最终所做的事情
"isWindowsOS": "[equals(parameters('ImageReferenceOffer'), 'WindowsServer')]"
"properties": {
"licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",