【发布时间】:2018-03-23 08:34:50
【问题描述】:
我在我的 ARM 模板中使用 if() 函数在我的 Web 应用资源中有条件地设置一些连接字符串值。目前的情况是这样的。
"[if(equals(parameters('isProduction'), 'Yes'), concat(variables('redisCacheName'),'.redis.cache.windows.net:6380|', listKeys(resourceId('Microsoft.Cache/Redis', variables('redisCacheName')), '2015-08-01').primaryKey, '|', variables('resourcePrefix')), parameters('redisSessionStateConnection'))]"
为了简化,条件如下所示;
[if(equals(arg1, arg2), true_expression, false_expression)]
当我部署 ARM 模板并将 isProduction 参数设置为 No 时,执行会引发异常。当isProduction 参数设置为Yes 时,模板可以正常工作。异常与 ARM 尝试查找不会部署在 非生产 环境中的 redis 缓存资源有关。
我的猜测是,即使 isProduction 参数值为 No,上述条件中引用 Redis 缓存资源的 true_expression 也会被执行,并且由于 Redis 缓存资源不是在非生产状态下创建的,它会引发异常。
所以我的问题是,当我们有上述条件时,if() 函数中的 true_expression 和 false_expression 是否会在实际条件之前评估if() 函数执行了吗?
如果是这样,有什么可能的解决方法来解决这个问题?
【问题讨论】:
标签: azure azure-resource-manager arm-template