【问题标题】:Terraform: Reference to undeclared input variableTerraform:引用未声明的输入变量
【发布时间】:2021-07-24 15:00:36
【问题描述】:

我有这样的 Terraform 结构: 三个模块(app、db、vpc)和两个目录(prod、stage)

├── modules
│   ├── app
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── db
│   │   ├── main.tf
│   │   └── variables.tf
│   └── vpc
│       ├── main.tf
│       └── variables.tf
├── prod
│   ├── main.tf
│   ├── outputs.tf
│   ├── terraform.tfstate
│   └── variables.tf
├── stage
│   ├── main.tf
│   ├── outputs.tf
│   ├── terraform.tfstate
│   └── variables.tf

当我从“stage”或“prod”目录启动 Terraform 并输入变量时:

terraform/prod - (main) > terraform plan
var.cluster_name
  Enter a value: prod

然后,我收到一个变量未设置的错误:

│ Error: Reference to undeclared input variable
│ 
│   on ../modules/app/main.tf line 47, in resource "google_compute_address" "app_ip":
│   47:   name    = var.cluster_name

│ An input variable with the name "cluster_name" has not been declared. This variable can be declared with a
│ variable "cluster_name" {} block.

有人可以帮忙吗,有什么问题吗?如何正确设置变量,以便在所选项目的所有模块中看到?

【问题讨论】:

  • 我假设您在 prod/main.tf 中调用 ../modules/app/main.tf 模块 - 检查您是否将变量显式传递给模块。请记住,子模块不仅会从其父模块继承变量。

标签: terraform terraform-provider-gcp


【解决方案1】:

我发现问题: 每个项目(/prod 和 /stage)中的文件 main.tf 必须像函数一样定义变量: cluster_name = var.cluster_name - 它丢失了 模块中的 cluster_name 是独立变量,必须在“函数”中定义,这里是配置:

module "app" {
  source = "../modules/app"
  cluster_name = var.cluster_name
}

module "db" {
  source = "../modules/db"
  cluster_name = var.cluster_name
}

module "vpc" {
  source = "../modules/vpc"
  cluster_name = var.cluster_name
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 2020-07-10
    • 2015-01-14
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多