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

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

我正在创建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声明中引用该变量?

.net azure arm-template
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.