如何传递variable.tf
中提到的"列表"或"映射"类型的变量的值。下面提到的input.tfvars
文件中的语法是否有任何错误?
目标不是对variables.tf
或main.tf
文件中的任何值进行硬编码。在Terraform.io
文档中,我验证了值可以以这种格式提供。
这是来自网站:列表是显式或隐式定义的:
# implicitly by using brackets [...]
variable "cidrs" { default = [] }
# explicitly
variable "cidrs" { type = "list" }
您可以在terraform.tfvars
文件中指定列表:
cidrs = [ "10.0.0.0/16", "10.1.0.0/16" ]
现在,当我尝试做
terraform plan -var-file=input.tfvars
它无法从 TFvars 文件中读取变量值,并显示以下错误:
错误:模块根:模块 VPC:
未设置
必需变量"vpccidr" 模块 VPC:未设置必需变量"vpcname">
variables.tf
文件如下所示:
variable "vpccidr" { type = "list"}
variable "vpcname" { type = "list" }
input.tfvars
文件如下所示:
vpccidr=[ "10.1.0.0/16", "10.2.0.0/16", "10.3.0.0/16" ]
vpcname=[ "vpc1", "vpc2", "vpc3" ]
main.tf
文件如下所示:
module "vpc"{
source = "modules/network/vpc"
}
modules/network
下的VPC模块具有以下配置文件main.tf
和上述variables.tf
中提到的变量文件:
resource "aws_vpc" "customVpc" {
count = "${length(var.vpccidr)}"
cidr_block = "${element(var.vpccidr, count.index)}"
tags {
count = "${length(var.vpcname)}"
Name = "${element(var.vpcname, count.index)}"
}
}
你需要将变量传递给你的模块,即
module "vpc"{
source = "modules/network/vpc"
vpccidr = "${var.vpccidr}"
vpcname = "${var.vpcname}"
}