如何在Terragrunt中用数组定义多依赖并通过列表推导式配置输入?
问题:Terragrunt中能否通过数组+列表推导式简化依赖输入配置?
当前Terragrunt配置如下:
terraform { source = "${get_path_to_repo_root()}//modules/shared-infra" } dependency "project_1" { config_path = "../../../project_1" } dependency "project_2" { config_path = "../../../project_2" } inputs { shared_vpc_service_project_ids = [ dependency.project_1.outputs.project_id, dependency.project_2.outputs.project_id ] shared_vpc_host_subnet_users = [ "serviceAccount:${dependency.project_1.outputs.sa_email}", "serviceAccount:${dependency.project_2.outputs.sa_email}", ] < ... more variables ... > }
想知道是否可以将依赖定义在数组中,通过列表推导式配置inputs,从而实现新增项目时无需逐个更新每一项输入配置,类似如下写法:
locals { projects = [dependency.project_1, dependency.project_2] } inputs { shared_vpc_service_project_ids = [ for p in projects : p.outputs.project_id ] shared_vpc_host_subnet_users = [ for p in projects : "serviceAccount:${p.outputs.sa_email}" ] < ... more variables ... > }
回答
完全可以这么做,这种写法在Terragrunt中是合法且实用的,能有效减少重复配置,大幅提升维护效率。
优化后的完整配置如下:
terraform { source = "${get_path_to_repo_root()}//modules/shared-infra" } # 定义所有项目依赖 dependency "project_1" { config_path = "../../../project_1" } dependency "project_2" { config_path = "../../../project_2" } # 用locals统一管理依赖引用集合 locals { projects = [dependency.project_1, dependency.project_2] } inputs { shared_vpc_service_project_ids = [for p in local.projects : p.outputs.project_id] shared_vpc_host_subnet_users = [for p in local.projects : "serviceAccount:${p.outputs.sa_email}"] < ... more variables ... > }
后续新增项目时,仅需两步操作:
- 添加对应的
dependency块,比如dependency "project_3" { config_path = "../../../project_3" } - 在
local.projects数组中新增该依赖项,即projects = [dependency.project_1, dependency.project_2, dependency.project_3]
所有关联的输入配置会自动通过列表推导式生成,无需手动逐个修改inputs下的每一项。
内容的提问来源于stack exchange,提问作者Martynas Jurkus
相关产品推荐
相关产品推荐

