Terraform动态块中如何根据传入参数动态决定content的可选字段
你可以直接借助 Terraform 原生的 null 值特性实现需求,无需编写两个不同的 content 块:当参数赋值为 null 时,Terraform 会自动忽略该参数,不会将其纳入最终生成的配置中。
正确实现代码
dynamic "settings" { for_each = var.settings content { name = settings.value["name"] type = settings.value["type"] id = settings.value["id"] # 字段不存在时返回null,Terraform会自动忽略该参数 template = lookup(settings.value, "template", null) design = lookup(settings.value, "design", null) } }
补充说明
lookup是 Terraform 内置的取值函数,会从第一个参数的 map 中取第二个参数指定的key的值,如果key不存在则返回第三个参数的默认值,这里我们将默认值设为null即可实现你的需求。- 如果你使用 Terraform 0.14 及以上版本,也可以用
try函数简化写法:
template = try(settings.value.template, null) design = try(settings.value.design, null)
- 建议同步优化变量
settings的类型定义,明确标注可选字段,避免类型校验报错:
variable "settings" { type = list(object({ name = string type = string id = string template = optional(string) design = optional(string) })) }
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

