带嵌套数组的参数-是否可以迭代?

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

是否可以在属性中使用嵌套数组?假设top数组是父资源,嵌套数组是每个父资源的子资源。然后,我想遍历所有父母,然后遍历与每个父母相关联的所有孩子。

这是一个示例ARM模板。我在哪里创建带有主题和订阅的ServiceBus。每个主题至少具有一个与其关联的订阅。定义主题-嵌套数组中的订阅的属性将是最简单的,如下例所示。

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "serviceBus": {
      "defaultValue": {
        "location": "uksouth",
        "name": "myNewSB1",
        "skuCapacity": 1,
        "skuName": "Standard",
        "skuTier": "Standard"
      },
      "type": "object"
    },
    "serviceBusTopics": {
      "defaultValue": [
        {
          "name": "topic1",
          "subscriptions": [
            "topic1-sub1",
            "topic1-sub2"
          ]
        },
        {
          "name": "topic2",
          "subscriptions": [
            "topic2-subAbc"
          ]
        },
        {
          "name": "topicOther",
          "subscriptions": [
            "topicOther-subDef1",
            "topicOther-subDef2",
            "topicOther-subDef3",
            "topicOther-subDef4"
          ]
        }
      ],
      "type": "array"
    }
  },
  "resources": [
    {
      "apiVersion": "2017-04-01",
      "location": "[parameters('serviceBus').location]",
      "name": "[parameters('serviceBus').name]",
      "sku": {
        "capacity": "[parameters('serviceBus').skuCapacity]",
        "name": "[parameters('serviceBus').skuName]",
        "tier": "[parameters('serviceBus').skuTier]"
      },
      "type": "Microsoft.ServiceBus/namespaces"
    },
    {
      "apiVersion": "2017-04-01",
      "copy": {
        "count": "[length(parameters('serviceBusTopics'))]",
        "mode": "Parallel",
        "name": "topicsLoop"
      },
      "dependsOn": [
        "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBus').name)]"
      ],
      "name": "[concat(parameters('serviceBus').name, '/', parameters('serviceBusTopics')[copyIndex()].name)]",
      "type": "Microsoft.ServiceBus/namespaces/topics"
    },
    {
      "apiVersion": "2017-04-01",
      "copy": {
        "count": "[length(<...>)]",
        "mode": "Parallel",
        "name": "subscriptionsLoop"
      },
      "dependsOn": [
        "topicsLoop"
      ],
      "name": "[concat(parameters('serviceBus').name, '/', <...>, '/', <...>)]",
      "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions"
    }
  ]
}
azure arm-template azure-template
1个回答
0
投票

所以您有2个选择:

  1. 对每个资源进行硬编码,因此可以为数组中的1个对象创建1个资源,这样便可以进行迭代,但是当您从数组中添加\删除对象时-您将需要调整模板(显然不是最佳的)
  2. 使用嵌套模板。让我详细说明一下:

not sure how to reset the list counter, lol

  1. 在模板中创建嵌套的部署,以迭代基础数组,以便serviceBusTopics
  2. 将当前迭代传递到嵌套模板:"[parameters('serviceBusTopics')[copyIndex()]]"
  3. 在嵌套模板中,您只处理具有数组类型属性之一的单个对象,您可以对其进行迭代。
© www.soinside.com 2019 - 2024. All rights reserved.