【问题标题】:How do I use dependsOn on a copyIndex (array) resource?如何在 copyIndex (array) 资源上使用dependsOn?
【发布时间】:2019-11-20 04:04:07
【问题描述】:

我正在使用 arm 模板来部署主题和订阅。我要部署的资源类型为Microsoft.Resources/deployments,因为我的目标是部署所在位置外部的资源组。

如果主题已经存在,则模板有效。 因为 arm 模板资源是并行部署的,所以我需要让主题在订阅之前部署 - this ordering is made possible by dependsOn

我遇到的问题是,因为主题的 "name" 值有 copyIndex(),我不确定如何定位主题资源。

在我尝试过的许多事情中,以下是一些:

  • [concat(parameters('serviceBusNamespaceName'), '/', parameters('subscriptions')[copyIndex()].topic)]
  • [resourceId('Microsoft.Resources/deployments', parameters('topics'))]
  • ["topicLoop"]

这是我模板中的主题和订阅资源对象:

        {
            "apiVersion": "2018-02-01",
            "type": "Microsoft.Resources/deployments",
            "name": "[concat(parameters('serviceBusNamespaceName'), copyIndex())]",
            "resourceGroup": "[parameters('sharedResourcesResourceGroupName')]",
            "copy": {
                "name": "topicLoop",
                "count": "[length(parameters('topics'))]"
            },
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "2018-05-01",
                    "contentVersion": "1.0.0.0",
                    "resources": [
                        {
                            "type": "Microsoft.ServiceBus/namespaces/topics",
                            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('topics')[copyIndex()])]",
                            "apiVersion": "2017-04-01",
                            "location": "[resourceGroup().location]",
                            "properties": {}                  
                        }
                    ]
                }
            }
        },
        {
            "apiVersion": "2018-02-01",
            "type": "Microsoft.Resources/deployments",
            "name": "[concat(parameters('subscriptions')[copyIndex()].topic, copyIndex())]",
            "resourceGroup": "[parameters('sharedResourcesResourceGroupName')]",
            "copy": {
                "name": "subscriptionLoop",
                "count": "[length(parameters('subscriptions'))]"
            },
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "2018-05-01",
                    "contentVersion": "1.0.0.0",
                    "resources": [
                        {
                            "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions",
                            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('subscriptions')[copyIndex()].topic, '/', parameters('subscriptions')[copyIndex()].subscription)]",
                            "apiVersion": "2017-04-01",
                            "location": "[resourceGroup().location]",
                            "properties": {}          
                        }
                    ]
                }
            },
            "dependsOn": [
                // what goes here?! I need to have this depend on the topics 
            ]
        }

【问题讨论】:

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


    【解决方案1】:

    dependsOn 的值很简单:

    "dependsOn" : ["topicLoop"]

    但它需要位于最外部的资源上,而不是嵌套模板。

    【讨论】:

      【解决方案2】:

      是的,您可以为每个单独的资源使用dependsOn,前提是您可以生成其名称。或者你可以对它们进行硬编码。无论哪种方式,您都可以dependsOn 整个循环,方法是使用其名称或循环内的各个资源,方法是通过它们的名称引用它们

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 2020-10-10
        • 2021-06-03
        • 2022-09-29
        • 2016-09-23
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多