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

问题描述 投票:0回答:2

我知道可以选择对属性值进行条件输出,但是是否可以拥有条件属性本身。例如,我有一个创建

Microsoft.Compute/VirtualMachine
的模板,它对于 Windows 和 Linux 都是相同的模板。但对于 Windows,我需要指定 Linux 不存在的属性 (
"licenseType": "Windows_Server")
。存在此属性将导致部署失败,并出现错误
The property 'LicenseType' cannot be used together with property 'linuxConfiguration'

我想弄清楚是否可以仅针对 Windows 图像包含此属性,同时保持模板相同?

azure-resource-manager
2个回答
17
投票

是的,这是可能的,但是很hacky。几个选项:

  1. 创建 2 个具有不同属性的虚拟机资源,调整它们以便只部署一个
  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') ))]"

14
投票

这是我根据之前的答案和评论最终所做的事情

  1. 定义变量是你正在处理Windows

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

  1. 在虚拟机资源的属性中使用它,如下所示。不需要嵌套部署等。
    
       "properties": {
       "licenseType": "[if(variables('isWindowsOS'), 'Windows_Server', json('null'))]",
    
© www.soinside.com 2019 - 2024. All rights reserved.