【问题标题】:ARM template: Way to workaround for nested copy in variable sectionARM模板:变量部分中嵌套副本的解决方法
【发布时间】:2024-01-22 20:39:01
【问题描述】:

我正在使用 azure-arm 模板,下面尝试在变量部分创建副本迭代失败。这给了我错误,说不支持嵌套,我是否遗漏了什么,如果不支持嵌套副本,如何继续创建包含数组的对象数组。

    "copy": [
      {
        "name": "VmInfo",
        "count": "[parameters('vmCount')]",
        "input": {
          "skuQualVmName": "[concat(parameters('vmName'), '-vm-', copyIndex('VmInfo',1))]",
          "copy": [
            "name": "vmInterfaceNames",
            "count": "[parameters('nicCountPerVm')]",
            "input": "[concat(parameters(vmName), '-vm-', copyIndex('VmInfo',1), '-nic-', copyIndex('vmInterfaceNames',1))]"
        ]
        }
      }
    ],

我还想知道变量中是否支持多个复制语句,如下所示

....
"copy": [
            {
                "name": "publicIpAdressResourceArray",
                "count": "[parameters('vmCount')]",
                "input": {
                    "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat('primary-ip-', parameters('vmNames')[copyIndex('publicIpAdressResourceArray')]))]"
               }
            }
        ]
    },
   "copy": [
      {
        "name": "networkInterfaceNames",
        "count": "[mul(parameters('vmCount'),parameters('nicCountPerVm'))]",
        "input": "[concat(  parameters('vmNameSubString'), '-vm-', div(copyIndex('networkInterfaceNames'),parameters('nicCountPerVm')), '-nic-', mod(copyIndex('networkInterfaceNames'),parameters('nicCountPerVm')))]"
      }
    ],
....

【问题讨论】:

    标签: azure azure-devops azure-resource-manager azure-template


    【解决方案1】:

    第一个副本是正确的,对于第二个问题,你可以这样做:

    "copy": [
        {
            "name": "firstvar",
            xxx
        },
        {
            "name": "secondvar",
            yyy
        }
    ]
    

    所以只需对您需要的所有 var 迭代使用单个复制语句。如果您正在寻找变量的属性,作为需要生成\计算的数组 - 您可以使用嵌套部署:

    1. 创建基础变量
    2. 将其传递到嵌套部署中
    3. 传递所有相关数据以计算您的第二个数组
    4. 在嵌套部署中创建一个具有所需结构的新变量
    5. 输出并使用

    但是,您最好的选择可能是在 arm 模板之外进行计算。

    【讨论】:

    • 关于第一个我得到以下错误:New-AzResourceGroupDeployment:11:21:44 - 错误:代码=无效模板;消息=部署模板验证失败:“197”行和“17”列的模板“复制”定义具有嵌套的复制数组。不支持使用嵌套复制数组。请参阅aka.ms/arm-copy 了解使用详情。'.
    • 啊,没注意到你在第一个里面有副本,这不可能,就像我说的那样