如何在Terraform的dynamic动态块中定义可选的单实例嵌套path块
问题原因
你收到的报错是因为path在对应资源的定义中属于嵌套块类型,不是普通参数,不能直接使用path = 变量值的格式赋值,必须单独声明为块结构。
你之前尝试嵌套dynamic块时触发实例数过多,是没有正确控制for_each的迭代数量,只要保证path块的for_each最多只有1个迭代项即可解决。
正确实现代码
修改后的settings动态块写法如下:
dynamic "settings" { for_each = var.settings content { type = settings.value["type"] operator = settings.value["operator"] # property 也是可选字段,用lookup处理避免找不到key报错 property = lookup(settings.value, "property", null) target = settings.value["target"] # 嵌套动态path块,仅存在path字段时生成 dynamic "path" { # 存在path则生成单元素迭代列表,不存在则为空列表 for_each = lookup(settings.value, "path", null) != null ? [settings.value.path] : [] content { operator = path.value["operator"] targetValue = path.value["targetValue"] jsonPath = path.value["jsonPath"] } } } }
附加优化建议
如果使用Terraform 0.14及以上版本,建议在定义settings变量时明确可选字段约束,避免运行时出现找不到key的错误:
variable "settings" { type = list(object({ type = string operator = string target = any property = optional(string) path = optional(object({ operator = string targetValue = any jsonPath = string })) })) }
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

