我在模板中有一个变量,它包含许多条目,这些条目将指定模板中的值。我的意思是我有
"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 模板中执行此操作,或者我是否只能使用嵌套的 if 函数调用?
谢谢
答案1
您可以使用参数选择所需的对象,然后将其用作对象选择的一部分来实现这一点。您还需要从“ipSecurityRestrictions”对象中删除数组语法,因为它们都是 1 的数组,这没有任何好处,而且会给您带来问题。
下面的示例允许使用参数选择要使用的对象,然后在输出中使用该对象。您可以对此进行扩展以满足您的需要。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"ipRestriction": {
"type": "string",
"allowedValues": [
"denyAllInbound",
"allowAppGatewayOnly",
"allowAll"
],
"metadata": {
"description": "description"
}
}
},
"variables": {
"ipSecurityRestrictions": {
"denyAllInbound": {
"ipAddress": "0.0.0.0/0",
"action": "Deny",
"priority": 100,
"name": "Deny All Inbound"
},
"allowAppGatewayOnly": {
"action": "allow",
"priority": 100,
"name": "Allow App Gateway"
},
"allowAll": {
"action": "allow",
"priority": 100,
"name": "Allow All"
}
}
},
"resources": [
],
"outputs": {
"example": {
"type": "string",
"value": "[variables('ipSecurityRestrictions')[parameters('ipRestriction')].name]"
}
},
"functions": [
]
}