【问题标题】:Using If/Else in Arm Templates在 Arm 模板中使用 If/Else
【发布时间】:2020-11-05 05:41:09
【问题描述】:

我有一个可以自动构建多 VM 环境的 ARM。我希望请用户根据环境的大小来定义 SMALL/MEDIUM/LARGE。然后,模板将根据环境大小的值决定 VM 的类型。例如,如果 size = 'SMALL',则 vmSize = 'Standard_E2s_v3',否则如果 size = 'MEDIUM',则 vmSize = 'Standard_E8s_v3',否则如果 size = 'LARGE',则 vmSize = 'Standard_E16s_v3'。我该怎么做?

ARM 模板是否支持 if/else 语句?

【问题讨论】:

    标签: azure azure-resource-manager


    【解决方案1】:

    您当然可以在语言中嵌套 if() 语句(请参阅:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions#logical-functions),但下面的方法更容易阅读 IMO...

    1. 使用您的 T 恤设置创建一个变量(如果需要,您可以在此处放置多个属性)
        "vmSize": {
          "small": "Standard_E2s_v3",
          "medium": "Standard_E8s_v3",
          "large": "Standard_E16s_v3"
        }
    
    1. 然后通过以下方式设置大小:

    "vmSize": "[variables('vmSize')[parameters('tshirtSize')]]"

    【讨论】:

      【解决方案2】:

      你应该看看variables

      代码可能是这样的:

      "parameters": {
        "size": {
          "type": "string",
          "allowedValues": [
            "small",
            "medium"
          ]
        }
      },
      "variables": {
        "vmsizes": {
          "small": {
            "vmSize": "Standard_E2s_v3"
          },
          "medium": {
            "vmSize": "Standard_E8s_v3"
          }
        }
      },
      

      可以这样使用:

      "[variables('vmsizes')[parameters('size')].vmSize]"
      

      您也可以使用单个变量和 logical expression (if/else) 来做同样的事情

      "vmSize": "[if(equals(parameters('size'), 'small'), 'Standard_E2s_v3', '<probably a nested if in your case>')]"
      

      我更喜欢第一个选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多