【问题标题】:How to use if else in ARM template azure如何在ARM模板azure中使用if else
【发布时间】:2021-11-09 13:40:23
【问题描述】:

我在 c# 中创建了示例函数,它根据参数设置位置值。我想用arm模板样式格式写下面的表达式。

public static Main(string name)
{
    string location = string.Empty;
    if(name == "uksouth")
    {
        location = "UKS";
    }else if(name == "ukwest")
    {
        location = "UKE";
    }else if(name == "IndiaWest")
    {
        location = "INDW";
    }
    else {
        location = "INDS";
    }

}

我已经为一个匹配条件写了这个,但我想根据用户资源组返回值。

"value": "[if(equals(resourceGroup().location,'uksouth'), 'UKS', 'EUS')]"

【问题讨论】:

    标签: azure-devops azure-pipelines arm-template


    【解决方案1】:

    尝试定义一个变量,它是一个像哈希表一样使用的对象。通过键名从对象中检索不同的属性,以键值对的形式访问属性。我在我的 ARM 模板中使用了与查找值非常相似的东西。

    "variables" {
      "locationShorten": {
        "uksouth": "UKS",
        "ukwest": "UKE",
        "IndiaWest": "INDW",
        "IndiaSouth": "INDS"
      },
      "locationShort": "[variables('locationShorten')[resourceGroup().location]]"}
    

    Microsoft 将对象的属性定义为键值对。 “对象中的每个属性都由键和值组成。键和值用双引号括起来,并用冒号 (:) 分隔。” 来源:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/data-types#objects

    至于关于使用[] 访问对象属性的文档,我无法再为 JSON 找到它,但它适用于 BICEP。 “您还可以使用 [] 语法来访问属性。” 来源:https://docs.microsoft.com/en-us/azure/azure-resource-manager/bicep/data-types#objects

    【讨论】:

      【解决方案2】:

      不幸的是,ARM 模板不提供等效的“切换”机制,这可能会使这变得更容易。但是,您可以嵌套多个 if 语句。语法有点笨拙,但这应该与您编写的代码等效:

      "value": "[if(equals(resourceGroup().location,'uksouth'), 'UKS', [if(equals(resourceGroup().location,'ukwest'), 'UKE', [if(equals(resourceGroup().location,'IndiaWest'), 'INDW', 'INDS')])])]"
      

      这是相同的代码,但应用了一些格式,以使这里发生的事情更加明显:

      "value": "
          [if(equals(resourceGroup().location,'uksouth'), 
              'UKS', 
          [if(equals(resourceGroup().location,'ukwest'), 
              'UKE', 
          [if(equals(resourceGroup().location,'IndiaWest'), 
              'INDW', 
          'INDS')])])]
      "
      

      您也可以考虑使用this answer 中描述的方法以获得更清洁的解决方案。

      【讨论】:

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