一个人可以从多个(副本/ copyIndex)ARM子模板获取输出吗?

时间:2018-11-11 22:25:53

标签: arm-template

我有一个父模板,该模板带有一个数组(websites,并使用website方法多次调用childTemplate(copyIndex())来遍历作为a传递的数组中的值。参数。

每个子模板都会在其output中返回MSI principalIdoutgoingIPAddresses

有没有一种方法可以将返回的各个principalId值组合成一个数组,该数组可由父模板调用的后续子模板使用(以便循环遍历principalId的结果数组并赋予他们KeyVault的所有相同权利?

谢谢。

1 个答案:

答案 0 :(得分:0)

是的,虽然不是您想要的那样漂亮/容易,但是可以做到这一点。

最简单的方法是使用模板的输出组装所需的值数组。您需要每个模板都采用上一个模板的输出,并将其与自己的输出合并,然后将结果作为输出吐出。示例代码:

    {
        "name": "reference0", << this one is needed so that the first real one has something to reference, as it cant reference itself
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2015-01-01",
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "yourtemplate",
                "contentVersion": "1.0.0.0"
            }
        },
        "parameters": {
            "state": {
                "value": []
            }
        }
    },
    {
        "name": "[concat('reference', copyIndex(1))]",
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2015-01-01",
        "copy": {
            "name": "loop",
            "count": "[variables('types')[resourceGroup().name]]"
        },
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "yourtemplate",
                "contentVersion": "1.0.0.0"
            },
            "parameters": {
                "state": {
                    "value": "[reference(concat('loop', copyIndex())).outputs.state.value]"
                }
            }
        }
    },

和您的状态输出应该只是这样:

"outputs": {
    "state": {
        "type": "array",
        "value": "[concat(parameters('state'), array(your_actual_output))]"
}