gpt4 book ai didi

azure - if() 函数如何在 Azure 资源管理器模板中执行

转载 作者:行者123 更新时间:2023-12-01 11:30:50 24 4
gpt4 key购买 nike

我在 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_expressionfalse_expression会是在执行 if() 函数的实际条件之前评估?

如果是这样,有什么可能的解决方法来解决这个问题?

最佳答案

无论如何,if() 的两边都会被求值(在 ARM 模板中)。所以你必须使用“聪明”的方法来解决这个问题。

您可以使用嵌套部署\变量来尝试解决该问题。

更新:这个问题已在不久前修复,仅评估 if() 函数的相关部分。

关于azure - if() 函数如何在 Azure 资源管理器模板中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49445384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com