Terraform模块中实现If Else条件配置的技术咨询
Terraform 条件逻辑实现方案
核心实现思路
Terraform支持直接用条件表达式动态计算参数值,不用在variables.tf里硬写规则,只需在模块调用或资源定义时,通过内置函数和三元表达式实现你要的判断逻辑。
方案1:在模块内部处理(推荐,适合复用)
如果/modules/xyz是你自己维护的模块,先调整模块的变量和资源配置:
1. 模块的variables.tf添加输入变量
variable "name" { type = string description = "实例名称" } variable "type" { type = string description = "实例类型标识" } # 配置默认实例类型,作为条件不满足时的 fallback 值 variable "default_instance_type" { type = string description = "默认实例类型" default = "hfd" }
2. 模块资源中用条件表达式计算instance_type
在模块的资源定义(比如EC2实例)里,替换instance_type的赋值:
resource "aws_instance" "example" { # 其他必填配置(如ami、subnet_id等)... instance_type = (contains(["abc", "xyz"], var.name) && var.type == "pqr") ? "jkl" : var.default_instance_type }
方案2:直接在模块调用时计算(无需修改模块)
如果不想改动模块代码,直接在testabc.tf里计算instance_type的值:
# 先定义type变量(如果需要动态传入的话) variable "type" { type = string default = "pqr" } module "testabc" { source = "/modules/xyz" name = "abc" hostname = "jdksnkfjsdn" # 直接在这里用条件逻辑计算实例类型 instance_type = (contains(["abc", "xyz"], var.name) && var.type == "pqr") ? "jkl" : "hfd" }
关键语法说明
contains(["abc", "xyz"], var.name):Terraform内置函数,判断var.name是否在指定列表中,实现“name为abc或xyz”的逻辑condition ? true_val : false_val:三元表达式,当条件为真时取true_val,否则取false_val- 若需复用逻辑,可封装为本地值:
locals { use_jkl_instance = contains(["abc", "xyz"], var.name) && var.type == "pqr" } module "testabc" { source = "/modules/xyz" name = "abc" hostname = "jdksnkfjsdn" instance_type = local.use_jkl_instance ? "jkl" : "hfd" }
内容的提问来源于stack exchange,提问作者zimba
相关产品推荐
相关产品推荐

