Terraform嵌套数据筛选含terraform主题仓库失败,循环集合为空求助
解决Terraform中筛选含特定主题仓库的问题
你尝试基于嵌套的仓库数据构建可遍历集合,目标是给所有带有terraform主题的仓库上传tflint配置文件,但目前local.terraform_repos返回空映射,无法正确筛选目标仓库。
现有配置
repos.tfvars
repositories = { workflows = { description = "Reusable workflow repository" topics = ["github-actions", "reusable-workflows"] }, aws-network-speciality = { description = "AWS Network Speciality study repository" topics = ["amazon-web-services", "aws", "terraform", "iac"] } }
main.tf
locals { terraform_repos = { for each, repo in var.repositories : each => repo if contains(["terraform"], repo)} resource "github_repository_file" "tflint" { for_each = local.terraform_repos repository = each.key file = ".tflint" content = file("${path.module}/github_repository_files/.tflint") commit_message = "chore(managed-by-terraform): tflint configuration file" }
问题原因与修正
你当前的contains函数调用逻辑错误:contains(["terraform"], repo)是在检查完整的仓库对象是否等于字符串"terraform",而非检查仓库的topics数组中是否包含该字符串。
修正local.terraform_repos的筛选逻辑,改为深入查询仓库的topics字段:
locals { terraform_repos = { for repo_name, repo_details in var.repositories : repo_name => repo_details if contains(repo_details.topics, "terraform") } }
- 遍历
var.repositories时,repo_details代表每个仓库的详情对象,包含description和topics字段 contains(repo_details.topics, "terraform")会判断该仓库的主题数组中是否包含terraform关键词- 筛选后的
local.terraform_repos仅保留符合条件的仓库,后续github_repository_file资源就能正确遍历这些仓库并上传tflint文件
内容的提问来源于stack exchange,提问作者chris3ware
相关产品推荐
相关产品推荐

