代码之家  ›  专栏  ›  技术社区  ›  Kamsiinov

将NSG应用到子网时,不应使用Azure ARM模板“copyIndex”

  •  0
  • Kamsiinov  · 技术社区  · 6 年前

    我正在创建具有复制功能的NSG,它工作正常。但是,我希望将NSG类似的方式应用到子网,但是我得到的copyIndex不是预期的。

    {
      "apiVersion": "2017-08-01",
      "name": "apply-nsg-to-subnet",
      "type": "Microsoft.Resources/deployments",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "#{BuildNumber}#",
          "resources": [
            {
              "apiVersion": "2018-06-01",
              "type": "Microsoft.Network/virtualNetworks/subnets",
              "name": "[concat(parameters('vnetName') , '/' , parameters('subnets').settings[copyIndex()].name)]",
              "location": "[variables('location')]",
              "copy":{
                "name": "subnetLoop",
                "count": "[variables('subnetcount')]",
                "mode": "Serial"
              },
              "properties": {
                "addressPrefix": "[parameters('subnets').settings[copyIndex()].addressPrefix]",
                "networkSecurityGroup": {
                  "id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat(parameters('nsgNameAffix'), parameters('subnets').settings[copyIndex()].name, variables('nsgNameSuffix')))]"
                }
              }
            }
          ]
        }
      }
    }
    

    我的copyindex使用有什么问题,在这种情况下应该如何使用?

    1 回复  |  直到 6 年前
        1
  •  1
  •   4c74356b41    6 年前

    这是由于您使用的嵌套内联模板,我能够重新编写,并且能够处理此示例模板:

    {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "subnets": {
                "type": "array",
                "defaultValue": [
                    {
                        "name": "testo",
                        "addressPrefix": "10.0.0.0/24"
                    },
                    {
                        "name": "testo1",
                        "addressPrefix": "10.0.1.0/24"
                    }
                ]
            }
        },
        "resources": [
            {
                "apiVersion": "2018-08-01",
                "name": "vnet-testo",
                "type": "Microsoft.Network/virtualNetworks",
                "location": "[resourceGroup().location]",
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    }
                }
            },
            {
                "apiVersion": "2015-06-15",
                "type": "Microsoft.Network/networkSecurityGroups",
                "name": "[parameters('subnets')[copyIndex()].name]",
                "location": "[resourceGroup().location]",
                "copy": {
                    "name": "nsg",
                    "count": "[length(parameters('subnets'))]"
                },
                "properties": {
                    "securityRules": []
                }
            },
            {
                "name": "NestedDeployment1",
                "type": "Microsoft.Resources/deployments",
                "apiVersion": "2015-01-01",
                "dependsOn": [
                    "nsg",
                    "vnet-testo"
                ],
                "properties": {
                    "mode": "Incremental",
                    "templateLink": {
                        "uri": "https://paste.ee/d/iCWEu/0",
                        "contentVersion": "1.0.0.0"
                    },
                    "parameters": {
                        "subnets": {
                            "value": "[parameters('subnets')]"
                        }
                    }
                }
            }
        ]
    }
    

    基本上,我只是将您的模板转换为嵌套模板(不是内联模板)。

    检查我的拷贝定义,它比你的好一点。