Terraform中如何基于其他变量值实现本地变量的条件赋值?
Terraform 条件赋值正确实现方式
首先先修正你现有代码的两个基础问题:
- 第一个变量声明语法错误,Terraform 变量必须以
variable关键字开头,不能写var;另外建议给布尔类变量显式指定bool类型,不要用字符串形式的"false"做默认值,避免类型判断异常,修正后变量定义如下:
variable "isadd1DiskSourceExists" { description = "Additional Disk Source" type = bool default = false }
- 你之前写的赋值代码末尾多了无效的
):""残片,属于手误语法错误,需要删除。
Terraform 的HCL语法不支持在locals块内直接写if分支语句,所有条件逻辑都通过三元表达式实现,需要多层判断时直接嵌套三元即可,对应你要的逻辑代码如下:
locals { add_source_image = var.isadd1DiskSourceExists ? ( var.add_source_image != "" ? var.add_source_image : "centos-7-v20201112" ) : "" }
逻辑说明
- 最外层三元表达式先判断开关变量
var.isadd1DiskSourceExists的值:- 当值为
true时,执行括号内你原本的赋值规则:如果用户传入了add_source_image变量值就直接使用,没传就 fallback 到默认镜像centos-7-v20201112 - 当值为
false时,走假分支逻辑,示例中返回空字符串,你可以根据实际需求替换成null或者其他你需要的赋值内容
- 当值为
注意:Terraform 中local值一旦声明就必须有确定返回值,不存在“不赋值”的状态。如果你不需要在开关为false时使用这个值,把假分支设为
null即可,后续引用时可以通过can或者try函数判断值是否有效。
内容的提问来源于stack exchange,提问作者user1403505
相关产品推荐
相关产品推荐

