Azure 在ARM中,如何在数组集合中包含可选的参数化对象?

Azure 在ARM中,如何在数组集合中包含可选的参数化对象?,azure,azure-devops,azure-resource-manager,Azure,Azure Devops,Azure Resource Manager,我有一个ARM模板,它使用一个参数定义KeyVault的访问策略。KeyVault定义已包含访问策略。我需要将参数附加到访问策略集合(如果存在)。我找不到一种在设置值和未设置值时都能工作的方法 当参数设置为空时,以下选项不起作用。我需要它是可选的 "accessPolicies": [ { "tenantId": "[subscription().tenantId]", "objectI

我有一个ARM模板,它使用一个参数定义KeyVault的访问策略。KeyVault定义已包含访问策略。我需要将参数附加到访问策略集合(如果存在)。我找不到一种在设置值和未设置值时都能工作的方法

当参数设置为空时,以下选项不起作用。我需要它是可选的

"accessPolicies": [
    {
        "tenantId": "[subscription().tenantId]",
        "objectId": "[reference(resourceId('Microsoft.Web/sites', variables('myazfunc')), '2019-08-01', 'Full').identity.principalId]",
        "permissions": {
            "secrets": [
                "get",
                "list"
            ]
        }
    },
    "[parameters('additionalAccessPolicy')]"
]

有人知道我如何做到这一点吗?我觉得我什么都试过了。希望我错过了一些东西。

要实现类似的效果,您可以使用
if()
函数和
concat()
函数,因此,如果满足某些条件,则仅将可选数组连接到现有数组

因此,您可以使用默认数组和可选数组作为变量,并执行以下操作:

"accessPolicies": "[if(something, variables('default'), concat(variables('default'), variables('optional'))]"

我已经试过了,但是我不能在变量中使用
reference()
,我还没有弄明白如何在if语句中放置数组文字来避免使用变量。好吧,我不认为你能做到这一点,我的意思是你可以尝试使用
json(“[put\u something\u here]”)函数
,但我不认为这是一个可行的解决方案。使用嵌套模板构造值,并在if语句中使用该值