跨Azure ARM模板中的`copy`声明引用变量

我正在创建Azure ARM模板。我使用copy声明来避免重复代码。但是,我发现这通常会导致重复本身。考虑来自ARM Lab 6的以下示例:

  "variables": {
    "hubID": "[if(parameters('peer'),resourceId(parameters('hub').resourceGroup,'microsoft.Network/virtualNetworks/',parameters('hub').vnet.name),'')]","spokeID": "[resourceId('microsoft.Network/virtualNetworks/',parameters('spoke').vnet.name)]","copy": [
        {
            "name": "subnets","count": "[length(parameters('spoke').subnets)]","input": {
              "name": "[parameters('spoke').subnets[copyIndex('subnets')].name]","addressprefix": "[parameters('spoke').subnets[copyIndex('subnets')].addressprefix]","id": "[concat(resourceId('microsoft.Network/virtualNetworks/',parameters('spoke').vnet.name),'/subnets/',parameters('spoke').subnets[copyIndex('subnets')].name)]"
            }
        }
    ]
  }

parameters('spoke').subnets[copyIndex('subnets')]表达式重复多次。是否有一种方法可以将这个copy索引的表达式的结果分配给一个变量,然后可以在copy声明中引用该变量?

zhuguanglu 回答:跨Azure ARM模板中的`copy`声明引用变量

我不这样认为,从理论上讲,您可以创建带有这些ID列表的变量,并使用copyIndex()来访问其他几个复制变量中的变量,但是您仍然必须在其中声明该第一个变量类似的方式。

从技术上讲,您可以编写一个函数,该函数接受copyIndex()的值作为输入并从parameters('spoke').subnets数组中检索特定的实例,但前提是您同时需要nameaddressPrefix函数还需要接受要返回的参数(否则它将返回一个对象,并且您需要访问该对象的属性)。我不确定ARM模板函数是否可以返回对象,我从未真正使用过ARM模板中的函数,因为它们几乎没有用。

本文链接:https://www.f2er.com/3167072.html

大家都在问