我在模板中有一个变量,其中包含许多条目,这些条目将在我的模板中指定值。我的意思是我有
"ipSecurityRestrictions" : {
"denyAllInbound":
[
{
"ipAddress": "0.0.0.0/0",
"action": "Deny",
"priority": 100,
"name": "Deny All Inbound"
}
],
"allowAppGatewayOnly":
[
{
"vnetSubnetResourceId": "[variables('appGatewaySubnet')]",
"action": "allow",
"priority": 100,
"name": "Allow App Gateway"
}
]
}
}
我目前使用一个简单的 if 函数来根据参数确定要使用的函数(它实际上比这要复杂一些,但这对于这个问题来说已经足够了。)所以目前我有类似的东西
[if (equals(parameters('a'), 'allowAppGatewayOnly'), variables('ipSecurityRestrictions').allowAppGatewayOnly, variables('ipSecurityRestrictions').denyAllInbound)]
这很高兴地工作。但是,我想在变量中添加另一个条目,我不喜欢在其中有一个 if 链的想法,它很快就会变得丑陋。
所以我尝试了各种基于参数值的间接使用方法(所有这些都在复制循环内,参数数组中的不同条目可能有不同的条目)。
我尝试过类似的事情
"[variables('ipSecurityRestrictions')[parameters('appservices')[copyIndex()].ipSecurityRestrictions]]"
但我要问的事实意味着它没有用。[编辑:它确实有效 - 如果参数值是正确的,并且其中没有杂散的单引号!]
是否可以在 ARM 模板中执行此操作,或者如果函数调用,我是否坚持使用嵌套?
谢谢
您可以使用一个参数来选择您想要的对象,然后将其用作对象选择的一部分来实现这一点。您还需要从“ipSecurityRestrictions”对象中删除 Array 语法,因为它们都是 1 的数组,这没有任何好处并且会给您带来问题。
下面的示例允许使用参数选择要使用的对象,然后在输出中使用该对象。您可以对此进行扩展以执行您需要的操作。
}