You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:05:22