将条件逻辑添加到 ARM 模板
在某些情况下,可能需要选择性地部署资源。 常见的情况是在 VM 上添加负载均衡器。 假设你有一个电子商务站点,并且想要确保该站点可以承受通过促销增加的流量。 负载均衡器是一种可与 VM 关联的资源类型。 通过有条件地添加规则,你可以启用或禁用要应用于相关 VM 的负载均衡器。
描绘以下情况:
- 预先存在的资源组。 指定模板中的资源并对其进行部署时,将发生以下两种情况之一。 资源已部署,或资源未部署(如果已存在)。 检查资源是否存在是 Azure 资源管理器可为你执行的操作;该操作是隐式的。 问题在于,当你推断出如何检查某些资源是否预先存在时,是否可以充分利用此机制。
- 分支逻辑。 根据在部署时传递给模板的参数,你可能想要部署一组不同的资源。 要表示的内容称为“分支逻辑”。 如果参数具有特定类型的值,则选择第一个分支。 否则,请选择要部署的第二个或第三个分支。 分支逻辑以这种方式继续。
以上两种情况都表示应用条件逻辑的情况。 逻辑是资源管理器系统本身,或者是需要显式表示的内容。
条件部署
使用 condition
构造可以表示是否需要部署某些资源。 这是附加到资源元素的属性,其值为 true
或 false
。 通常,你会在模板中查找类似于以下 JSON 的 condition
构造:
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
在上述 JSON 中,向资源添加了一个 condition
属性。 属性的值的计算结果为参数 shouldDeploy
的值。
计算
可以通过两种方法来计算 condition
构造。 了解这两种方法可能会影响你选择表示 conditional 逻辑的方式。 两种不同的方法是:
值为 true/false。 例如,请考虑以下构造:
"condition": "[parameters('deployAccount')]"
deployAccount
值是一个参数,可以在部署时传递该参数的值,也可以回退到默认值。 不管使用哪种方法,值都为严格的 false 或 true。 尝试分配另一个非布尔值将导致错误。表达式的计算结果为 true/false。 此处,你将使用内置模板函数
equals(arg1, arg2)
,而不是将严格的 true/false 值分配到condition
构造。arg1
需要等于arg2
,以便函数的计算结果为 true。 现在,condition
构造可以按如下所示表示:"condition": "[equals(parameters('newOrExisting'),'new')]"
使用
equals()
函数时,传递给参数的值不再需要为true
或false
。 它需要与equals()
函数中的第二个参数相匹配。 在上面的 JSON 示例中,newOrExisting
参数的值需要与字符串new
匹配,才能使该函数的计算结果为true
。