代码之家  ›  专栏  ›  技术社区  ›  Gregory Suvalian

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

  •  0
  • Gregory Suvalian  · 技术社区  · 6 年前

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

    我正在试图弄清楚,在保持模板不变的情况下,是否可以仅为Windows图像包含此属性?

    2 回复  |  直到 6 年前
        1
  •  15
  •   4c74356b41    6 年前

    是的,这是有可能的,但是很难。有几种选择:

    1. 创建两个具有不同属性的VM资源,对它们进行调整,以便只部署一个
    2. 使用union函数和变量构造结果对象

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

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

    "property": "[if(something, variables('baseObject'), # new line for readability
        union(variables('baseObject'), variables('additionalObject') ))]"
    
        2
  •  12
  •   Gregory Suvalian    6 年前

    以下是我根据之前的回答和评论所做的事情

    1. 定义变量是您正在处理的窗口

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

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