如何在Terraform根模块通过tfvars定义复杂对象列表调用子模块
实现方案
要把包含pubsub_target嵌套对象的job_name列表移到根模块的tfvars文件中,根模块的main.tf需要完成以下配置:
1. 声明匹配结构的变量
在根模块的main.tf(或单独的variables.tf文件,更符合规范)中添加变量声明,确保变量结构和子模块接收的job_name参数完全匹配:
variable "scheduler_jobs" { type = list(object({ job_name = string pubsub_target = object({ topic_name = string # 按需补充子模块pubsub_target要求的其他字段,比如message_body、attributes等 }) # 如果子模块还需要其他字段(如schedule、time_zone),也同步添加到这里 })) description = "Scheduler jobs with associated Pub/Sub target configurations" default = [] }
2. 子模块调用时传入变量
修改根模块中调用schedular子模块的代码,把原来硬编码的job_name列表替换为上面声明的变量:
module "schedular" { source = "./path/to/schedular" # 替换为你的子模块实际路径 job_name = var.scheduler_jobs }
补充:tfvars文件示例
在根模块的terraform.tfvars(或自定义的*.tfvars文件)中定义具体的任务列表内容:
scheduler_jobs = [ { job_name = "daily-data-sync" pubsub_target = { topic_name = "projects/my-project-id/topics/data-sync-topic" } }, { job_name = "hourly-resource-cleanup" pubsub_target = { topic_name = "projects/my-project-id/topics/cleanup-topic" } } ]
注意:变量结构必须和子模块中job_name变量的定义严格一致,否则会出现类型不匹配的错误。
内容的提问来源于stack exchange,提问作者jy45v
相关产品推荐
相关产品推荐

