是否可以在 ARM 模板中有条件 属性
Is it possible to have conditional property in ARM template
我知道有条件输出 属性 值的选项,但是否可以有条件 属性 本身。例如,我有创建 Microsoft.Compute/VirtualMachine
的模板,它是 Windows 和 Linux 的相同模板。但是对于 windows,我需要指定 属性,Linux 不存在("licenseType": "Windows_Server")
。此 属性 的存在将导致部署失败并出现错误 The property 'LicenseType' cannot be used together with property 'linuxConfiguration'
我想弄清楚是否可以在保持模板不变的情况下仅将此 属性 包含在 Windows 图像中?
是的,这是可能的,但是很麻烦。几个选项:
- 创建 2 个具有不同属性的 VM 资源,调整它们以便只部署一个
- 使用联合函数和变量构造结果对象
- 附加 属性 作为单独的部署(可能不适用于所有情况)
让我稍微扩展一下第二个:
"variables": {
"baseObject": {
"propertyOne": "xxx",
"propertyTwo": "yyy
}
"additionalObject: {
"optionalProperty": "zzz"
}
}
然后在你的对象中你可以做:
"property": "[if(something, variables('baseObject'), # new line for readability
union(variables('baseObject'), variables('additionalObject') ))]"
这是我根据之前的回答和评论最终做的事情
- 定义变量是你正在处理的Windows
"isWindowsOS": "[equals(parameters('ImageReferenceOffer'), 'WindowsServer')]"
- 在 VM 资源的属性中使用它,如下所示。不需要嵌套部署等。
"properties": {
"licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",
我知道有条件输出 属性 值的选项,但是否可以有条件 属性 本身。例如,我有创建 Microsoft.Compute/VirtualMachine
的模板,它是 Windows 和 Linux 的相同模板。但是对于 windows,我需要指定 属性,Linux 不存在("licenseType": "Windows_Server")
。此 属性 的存在将导致部署失败并出现错误 The property 'LicenseType' cannot be used together with property 'linuxConfiguration'
我想弄清楚是否可以在保持模板不变的情况下仅将此 属性 包含在 Windows 图像中?
是的,这是可能的,但是很麻烦。几个选项:
- 创建 2 个具有不同属性的 VM 资源,调整它们以便只部署一个
- 使用联合函数和变量构造结果对象
- 附加 属性 作为单独的部署(可能不适用于所有情况)
让我稍微扩展一下第二个:
"variables": {
"baseObject": {
"propertyOne": "xxx",
"propertyTwo": "yyy
}
"additionalObject: {
"optionalProperty": "zzz"
}
}
然后在你的对象中你可以做:
"property": "[if(something, variables('baseObject'), # new line for readability
union(variables('baseObject'), variables('additionalObject') ))]"
这是我根据之前的回答和评论最终做的事情
- 定义变量是你正在处理的Windows
"isWindowsOS": "[equals(parameters('ImageReferenceOffer'), 'WindowsServer')]"
- 在 VM 资源的属性中使用它,如下所示。不需要嵌套部署等。
"properties": { "licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",