Terraform代码问题:仅填充YAML文件名而非内容至Git仓库
问题解决:Terraform将YAML文件内容写入Git仓库文件
你的代码问题出在fileset返回的是文件名集合而非文件内容,导致each.value传递的是文件名,而非YAML文件的实际内容。以下是修正方案:
修正后的代码
locals.tf
locals { # 获取当前模块下所有YAML文件名 yaml_file_names = fileset(path.module, "*.yaml") # 构建文件名到文件内容的映射 yaml_file_contents = { for file_name in local.yaml_file_names : file_name => file("${path.module}/${file_name}") } }
main.tf
resource "git_repository_file" "myresource" { # 遍历文件名-内容映射,每个文件对应一个资源实例 for_each = local.yaml_file_contents project = var.project-name # 拼接Git仓库中的目标路径,确保每个文件有独立路径(避免覆盖) filepath = "${var.filepath}/${each.key}" # 使用映射中的文件内容作为资源的content值 content = each.value }
关键说明
file()函数:Terraform的file()函数会读取指定路径下的文件内容,这里通过${path.module}/${file_name}拼接完整的文件路径,读取每个YAML文件的内容。- 映射型
for_each:使用键值对映射遍历,既保留文件名用于生成Git仓库中的文件路径,又能直接获取对应文件内容。 - 文件路径唯一性:
filepath拼接了基础路径和原文件名,确保每个YAML文件在Git仓库中对应独立的文件,不会出现覆盖问题。
内容的提问来源于stack exchange,提问作者rm916463
相关产品推荐
相关产品推荐

