ARM模板中是否可以具有条件属性

时间:2018-12-20 21:46:51

标签: azure-resource-manager

我知道可以为属性值提供条件输出,但是可以有条件属性本身。例如,我有创建Microsoft.Compute/VirtualMachine的模板,它对于Windows和Linux都是相同的模板。但是对于Windows,我需要指定Linux不存在的属性("licenseType": "Windows_Server")。此属性的存在将使部署失败,错误为The property 'LicenseType' cannot be used together with property 'linuxConfiguration'

我试图弄清楚是否有可能仅在Windows映像中包含此属性,同时保持模板不变?

2 个答案:

答案 0 :(得分:1)

是的,有可能,但是很老套。几个选项:

  1. 创建2个具有不同属性的VM资源,对其进行条件处理,以便仅部署其中一个
  2. 使用联合函数和变量构造结果对象
  3. 将属性附加为单独的部署(可能不适用于所有情况)

让我扩大第二位:

"variables": {
    "baseObject": {
        "propertyOne": "xxx",
        "propertyTwo": "yyy
    }
    "additionalObject: {
        "optionalProperty": "zzz"
    }
}

,然后在您的对象中可以执行以下操作:

"property": "[if(something, variables('baseObject'), # new line for readability
    union(variables('baseObject'), variables('additionalObject') ))]"

答案 1 :(得分:1)

这是我根据先前的答案以及评论所做的最终结果

  1. 定义变量是您正在使用Windows

"isWindowsOS": "[equals(parameters('ImageReferenceOffer'), 'WindowsServer')]"

  1. 在VM资源的属性中,如下使用它。无需嵌套部署等。    "properties": { "licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",