can';t在terraform 0.12的子模块中声明映射变量
我以前在terraform中有(工作)映射变量,但升级到terraform 0.12后,我不断收到表单错误:can';t在terraform 0.12的子模块中声明映射变量,terraform,terraform-provider-gcp,Terraform,Terraform Provider Gcp,我以前在terraform中有(工作)映射变量,但升级到terraform 0.12后,我不断收到表单错误: Error: Invalid value for module argument on main.tf line 84, in module "gke": 84: gke_label = "var.gke_label" The given value is not suitable for child module variable "gke_la
Error: Invalid value for module argument
on main.tf line 84, in module "gke":
84: gke_label = "var.gke_label"
The given value is not suitable for child module variable "gke_label" defined
at gke/variables.tf:40,1-19: map of any single type required.
我不明白如何升级这些映射变量。关于这一点的文件(对我来说)不是特别清楚
我的设置如下:
我有一个terraform文件夹结构:
├── infrastructure
│ ├── backend
│ │ ├── subnet
│ │ │ ├── main.tf
│ │ │ ├── outputs.tf
│ │ │ └── variables.tf
│ │ └── vpc
│ │ ├── main.tf
│ │ └── outputs.tf
│ ├── backend.tf
│ ├── backend.tfvars
│ ├── gke
│ │ ├── main.tf
│ │ ├── outputs.tf
│ │ └── variables.tf
│ ├── main.tf
│ ├── outputs.tf
│ ├── variables.tf
│ └── versions.tf
在main.tf中,我曾经/曾经(除其他外):
在variables.tf中(除其他外)
在gke/variables.tf中,我有:
variable "gke_num_nodes" {
type = map
description = "Number of nodes in each GKE cluster zone"
}
variable gke_label {
type = map
description = "label"
}
这过去工作正常,但随着terraform 0.12的升级,这将导致:
Error: Invalid value for module argument
on main.tf line 78, in module "gke":
78: gke_num_nodes = "var.gke_num_nodes"
The given value is not suitable for child module variable "gke_num_nodes"
defined at gke/variables.tf:15,1-25: map of any single type required.
Error: Invalid value for module argument
on main.tf line 84, in module "gke":
84: gke_label = "var.gke_label"
The given value is not suitable for child module variable "gke_label" defined
at gke/variables.tf:40,1-19: map of any single type required.
我在gke/variables.tf中进行了更改(对于num_节点相同)
但错误依然存在
Error: Invalid value for module argument
on main.tf line 84, in module "gke":
84: gke_label = "var.gke_label"
The given value is not suitable for child module variable "gke_label" defined
at gke/variables.tf:40,1-19: map of any single type required.
如何将这些映射变量更新为terraform 0.12?此terraform 0.12代码将按预期分配值(不是文字字符串): 在Terraform 0.11.x或Terraform 0.12中,如果在变量赋值周围使用引号而不使用插值,则它们将被视为字符串
gke_num_nodes = "var.gke_num_node"
上面的代码将文本字符串“var.gke_num_node”
分配给模块中的gke_num_nodes,而不是按照您的意愿分配var.gke_num_nodes的值。由于字符串不可分配给映射(任何),Terraform输出您显示的类型错误:
Error: Invalid value for module argument
on main.tf line 78, in module "gke":
78: gke_num_nodes = "var.gke_num_nodes"
在Terraform 0.11.x及更早版本中,您将使用字符串插值和${}
来获取变量的值:
gke_num_nodes = "${var.gke_num_node}"
Terraform 0.12中不推荐使用这种表达式,但在大多数情况下仍然有效。不要在Terraform 0.12中使用字符串插值,除非您正在从多个变量构建字符串
通过删除${}
,您跳到了Terraform0.12的一半。通过删除引号跳过剩余间隙,使变量赋值按预期工作:
gke_num_nodes = var.gke_num_node
以下是整个模块块,已更正以删除引号:
module "gke" {
source = "./gke"
region = var.region
min_master_version = var.min_master_version
node_version = var.node_version
gke_num_nodes = var.gke_num_node # [MAP VARIABLE]
vpc_name = module.vpc.vpc_name
subnet_name = module.subnet.subnet_name
gke_master_user = var.gke_master_user
gke_master_pass = var.gke_master_pass
gke_node_machine_type = var.gke_node_machine_type
gke_label = var.gke_label # [MAP VARIABLE]
}
谢谢您为什么将“var.region”留在“”中?我知道这是一根弦,但对其他一些人来说也是如此。那是因为我的大脑不在。我来编辑。非常感谢。
Error: Invalid value for module argument
on main.tf line 78, in module "gke":
78: gke_num_nodes = "var.gke_num_nodes"
gke_num_nodes = "${var.gke_num_node}"
gke_num_nodes = var.gke_num_node
module "gke" {
source = "./gke"
region = var.region
min_master_version = var.min_master_version
node_version = var.node_version
gke_num_nodes = var.gke_num_node # [MAP VARIABLE]
vpc_name = module.vpc.vpc_name
subnet_name = module.subnet.subnet_name
gke_master_user = var.gke_master_user
gke_master_pass = var.gke_master_pass
gke_node_machine_type = var.gke_node_machine_type
gke_label = var.gke_label # [MAP VARIABLE]
}