在Azure ARM模板中的"副本"声明中引用变量



我正在创建一个Azure ARM模板。我使用copy声明来避免重复我的代码;然而,我发现这往往会导致重复。考虑以下来自ARM实验室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声明中引用该变量?

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

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

最新更新