Terraform 12及以上版本是否支持布尔值自动转数字用于count计算?
行为原因说明
Terraform 0.11及更早版本确实支持布尔值自动隐式转换为1/0数值,但从0.12版本开始官方引入了强类型校验机制,彻底取消了不同类型之间的隐式自动转换,你遇到的报错属于高版本的预期行为,旧的隐式转换写法在0.12及后续所有版本中都不再原生支持。
低成本适配方案
无需全量手动替换所有布尔值,仅需对原有逻辑做极小修改即可兼容高版本,完全匹配你的原有业务逻辑:
- 原
signum乘法逻辑修改方案:
仅需给布尔变量增加一行三元转换即可,逻辑和原有写法完全一致:count = signum(var.cluster_size_max * (var.with_external_elb ? 1 : 0)) - 条件判断写法修复方案:
&&运算符要求两侧均为布尔值,你只需要把左侧的数值先转成布尔判断即可:
该写法可读性更高,和你需要的「cluster_size_max≥1且with_external_elb为true时创建资源」的逻辑完全匹配。count = (var.cluster_size_max >= 1) && var.with_external_elb ? 1 : 0
批量优化方案
如果仓库中这类隐式转换逻辑非常多,你可以封装一个全局通用的转换映射,所有场景统一调用即可,不用逐个修改:
locals { bool_to_num = { true = 1 false = 0 } }
后续所有需要布尔转数字的场景直接用local.bool_to_num[var.布尔变量名]调用即可,后续如果有规则调整仅需修改一次本地映射值。
内容的提问来源于stack exchange,提问作者scrow
相关产品推荐
相关产品推荐

