Terraform map(string)使用:Cloudflare区域覆盖设置模块开发问题
解决Terraform Cloudflare Zone Settings Override的动态配置问题
你的核心问题是没正确使用Terraform的动态嵌套块语法,之前的for_each用在了资源层面,而实际上需要针对settings嵌套块做动态生成。
正确实现代码
首先保留你的变量定义(如果需要支持非字符串类型的设置,可以把map(string)改成map(any)):
variable "settings" { type = map(string) default = {} }
然后修改资源配置,用dynamic块遍历你的map参数,生成符合要求的settings嵌套块:
resource "cloudflare_zone_settings_override" "this" { zone_id = cloudflare_zone.this.id dynamic "settings" { for_each = var.settings content { name = settings.key value = settings.value } } }
关键说明
Cloudflare的zone_settings_override资源要求每个配置项都通过settings嵌套块定义,每个块必须包含name(配置项名称)和value(配置值)两个参数,而不是直接用key = value的形式赋值。通过dynamic块遍历你的map,就能把每个键值对转换成对应的嵌套块。
比如你传入这样的变量值:
settings = { "always_online" = "on" "minify" = "on" }
Terraform会自动生成两个settings块,分别对应这两个配置项。
内容的提问来源于stack exchange,提问作者patrick_s
相关产品推荐
相关产品推荐

