Terraform中如何在kubernetes_config_map_v1的data字段遍历文件映射?
解决思路
错误原因
你混淆了Terraform中两种不同的遍历逻辑:
each对象仅能在资源/模块级别设置for_each参数后使用,用于批量创建多个资源实例;- 资源的
data字段本身接受map(string)类型的键值对,不需要在内部使用for_each语法。
修正方案
直接将filename=>content的映射赋值给data字段即可,Terraform会自动将映射中的键值对展开为ConfigMap的data条目。
示例代码(使用本地值)
locals { prefix = "example-prefix" # 生成filename=>content的映射 files = { for filename in fileset(path.root, "test/*json") : filename => templatefile("${path.root}/${filename}", { prefix = local.prefix }) } } resource "kubernetes_config_map_v1" "xyz" { metadata { name = "test-config" namespace = "default" } # 直接传入映射,自动生成ConfigMap的data条目 data = local.files }
示例代码(使用变量)
如果是通过变量传入映射:
variable "files" { type = map(string) description = "键为文件名、值为文件内容的映射" } resource "kubernetes_config_map_v1" "xyz" { metadata { name = "test-config" namespace = "default" } data = var.files }
进阶:对映射做额外处理
如果需要修改键名或过滤内容,可以在data字段内直接使用for表达式生成新映射,比如去掉文件名前缀:
data = { for filename, content in local.files : replace(filename, "test/", "") => content }
内容的提问来源于stack exchange,提问作者Frank Straubl
相关产品推荐
相关产品推荐

