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

如何通过Terraform基于JSON文件动态生成GitHub仓库的terraform.tfvars.json?

解决Terraform动态生成GitHub仓库及对应tfvars文件的问题

核心思路

通过Terraform的fileset函数自动扫描environments目录下的所有JSON文件,基于这些文件批量创建GitHub仓库,并将对应JSON文件的原始内容写入仓库中的terraform.tfvars.json文件,实现新增JSON文件时自动触发资源创建。

完整配置示例

1. 定义本地变量,读取环境配置文件

locals {
  # 获取environments目录下所有.json文件的路径
  env_file_paths = fileset(path.module, "environments/*.json")
  
  # 从文件路径中提取环境名(作为仓库名称)
  env_names = [
    replace(file_path, "environments/(.*)\\.json", "$1") 
    for file_path in local.env_file_paths
  ]
  
  # 构建环境配置映射:键为环境名,值为解析后的JSON内容(用于配置仓库属性)
  env_configs = {
    for name in local.env_names : name => jsondecode(file("environments/${name}.json"))
  }
}

2. 动态创建GitHub仓库

resource "github_repository" "environment_repos" {
  # 遍历每个环境配置,批量生成仓库
  for_each = local.env_configs

  name        = each.key
  description = each.value.description != null ? each.value.description : "Environment repo for ${each.key}"
  private     = each.value.private != null ? each.value.private : true
  default_branch = "main"
}

3. 动态向仓库添加terraform.tfvars.json文件

resource "github_repository_file" "terraform_tfvars" {
  # 与仓库资源使用相同遍历键,确保一一对应
  for_each = local.env_configs

  repository = github_repository.environment_repos[each.key].name
  file       = "terraform.tfvars.json"
  # 直接读取本地JSON文件的原始内容,保证与源文件一致
  content    = file("environments/${each.key}.json")
  branch     = github_repository.environment_repos[each.key].default_branch

  commit_message = "Add terraform.tfvars.json for ${each.key}"
}

关键说明

  • 自动识别新增文件:fileset函数会实时扫描目录,当environments目录新增.json文件时,Terraform执行plan时会自动识别并创建对应的仓库和文件资源。
  • 内容关联正确性:通过each.key关联环境名与仓库名,直接读取本地JSON文件原始内容写入仓库,避免解析后再序列化导致的格式差异。
  • 配置灵活性:env_configs中解析的JSON内容可用于配置仓库的私有性、描述等属性,可根据你的JSON结构调整字段。

注意事项

  • 确保GitHub Provider已配置足够权限(仓库创建、文件写入权限)。
  • 若JSON文件包含敏感信息,建议通过Terraform变量或密钥管理工具处理,避免直接暴露。

内容的提问来源于stack exchange,提问作者Container-Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:54:58