Terraform中无法调用tfvars文件变量的问题求助
问题排查与解决思路
1. 模块传参与变量定义不匹配
你用var.buildings做for_each遍历,但系统要求输入var.building_name,核心问题大概率是模块调用时未正确传递buildings变量,或是模块目录的variables.tf里还残留了未赋值的building_name变量定义:
- 打开根目录
main.tf,检查模块调用代码,确保将根变量的buildings传递给模块:module "site_settings" { source = "./modules/site_settings" # 必须明确传递buildings变量,不能遗漏 buildings = var.buildings } - 检查模块目录的
variables.tf,如果存在variable "building_name"的定义,直接删除(因为你用的是批量遍历的buildings),或者给它设置默认值避免触发输入提示。
2. 根目录与模块的变量类型要对齐
- 根目录
variables.tf需定义buildings变量,类型要匹配tfvars里的结构,比如:variable "buildings" { type = list(object({ name = string site_id = string # 其他必填字段 })) description = "批量创建的建筑列表" } - 模块目录的
variables.tf要同步定义同类型的buildings变量,确保能接收根目录传递的值:variable "buildings" { type = list(object({ name = string site_id = string # 与根变量字段完全匹配 })) description = "Catalyst Center中要创建的建筑列表" } - 模块内的
dnacenter_building资源要基于var.buildings遍历,不要依赖单独的building_name变量:resource "dnacenter_building" "this" { for_each = { for b in var.buildings : b.name => b } name = each.value.name site_id = each.value.site_id # 其他资源属性 }
3. 检查tfvars文件的变量名
确认Site-1/site-1.tfvars里的变量名是buildings而非building_name,正确格式示例:
buildings = [ { name = "总部大楼" site_id = "site-001" }, { name = "研发大楼" site_id = "site-002" } ]
如果tfvars里误写为building_name = "xxx",会导致Terraform无法识别批量配置,进而触发未赋值变量的输入提示。
4. 清理缓存避免旧状态干扰
旧的Terraform缓存或状态文件可能导致变量识别异常,执行以下命令清理后重新计划:
terraform init -reconfigure rm -rf .terraform/terraform.tfstate.backup
之后重新运行你的terraform plan命令,验证是否还会提示输入变量。
内容的提问来源于stack exchange,提问作者MupEHcEH
相关产品推荐
相关产品推荐

