ARM模板子数组

ARM template sub array

我正在为 NSG 准备 ARM 模板。以下是我的模板文件

    {
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nsgName": {
      "type": "string"
    },
    "securityRulesArray": {
      "type": "array",
      "metadata": {
        "description": "All required rules (name, description, protocol) in an array"
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "comments": "",
      "type": "Microsoft.Network/networkSecurityGroups",
      "name": "[parameters('nsgName')]",
      "apiVersion": "2018-02-01",
      "location": "westus",
      "properties": {
        "copy": [
          {
            "name": "securityRules",
            "count": "[length(parameters('securityRulesArray'))]",
            "input": {
              "name": "[parameters('securityRulesArray')[copyIndex('securityRules')].ruleName]",
              "properties": {
                "description": "[parameters('securityRulesArray')[copyIndex('securityRules')].description]",
                "protocol": "[parameters('securityRulesArray')[copyIndex('securityRules')].protocol]",
                "sourcePortRange": "[parameters('securityRulesArray')[copyIndex('securityRules')].sourcePortRange]",
                "destinationAddressPrefix": "[parameters('securityRulesArray')[copyIndex('securityRules')].destinationAddressPrefix]",
                "access": "[parameters('securityRulesArray')[copyIndex('securityRules')].access]",
                "priority": "[parameters('securityRulesArray')[copyIndex('securityRules')].priority]",
                "direction": "[parameters('securityRulesArray')[copyIndex('securityRules')].direction]",
                "sourcePortRanges": "[parameters('securityRulesArray')[copyIndex('securityRules')].sourcePortRanges]",
                "destinationPortRanges": "[parameters('securityRulesArray')[copyIndex('securityRules')].destinationPortRanges]",
                "sourceAddressPrefixes": "[parameters('securityRulesArray')[copyIndex('securityRules')].sourceAddressPrefixes][copyIndex()]",
                 "destinationAddressPrefixes": "[parameters('securityRulesArray')[copyIndex('securityRules')].destinationAddressPrefixes[copyIndex()]]",
                "destinationPortRange": "[parameters('securityRulesArray')[copyIndex('securityRules')].destinationPortRange]",
                "sourceAddressPrefix": "[parameters('securityRulesArray')[copyIndex('securityRules')].sourceAddressPrefix]"
              }
            }
          }
        ]
      },
      "dependsOn": []
    }
  ]
}

相同的参数文件

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "nsgName": {
      "value": "testnsgsample4"
    },
    "securityRulesArray": {
      "value": [
        {
          "ruleName": "11.113.218.1-21",
          "description": "Allow inbound traffic",
          "protocol": "*",
          "sourcePortRange": "*",
          "destinationAddressPrefix": "11.112.34.11",
          "access": "Allow",
          "priority": "105",
          "direction": "Inbound",
          "sourcePortRanges": [],
          "destinationPortRanges": [
            "3389",
            "22",
            "443",
            "135",
            "137",
            "445",
            "389",
            "636",
            "49152-65535"
          ],
          "sourceAddressPrefixes": [
            "11.11.137.72",
            "11.11.98.177",
            "11.11.99.22",
            "11.11.99.22"
          ],
          "destinationAddressPrefixes": [],
          "destinationPortRange": null,
          "sourceAddressPrefix": null
        }
      ]
    }
  }
}

当有子数组参数时,我的模板不工作,在我的例子中是 destination/sourceportranges 和 source/destinationaddressprefixes。我通过在下面手动执行检查它并且工作正常。我想知道如何将子数组参数与父数组参数一起传递。谢谢你的帮助。

//"destinationPortRanges": "[parameters('securityRulesArray')[copyIndex('securityRules')].destinationPortRanges]",

"destinationPortRanges": [
                      "3389",
                      "22",
                      "443",
                      "135",
                      "137",
                      "445",
                      "389",
                      "636",
                      "49152-65535"
                    ],

你这样做没有意义,你应该做的是:

{
    "type": "Microsoft.Network/networkSecurityGroups",
    "name": "[parameters('nsgName')]",
    "apiVersion": "2018-02-01",
    "location": "westus",
    "properties": "[parameters('securityRulesArray')]"
}

无论如何,我会说这种方法很奇怪。