如何传递variable.tf
类型为“ list”或“ map”的变量的值。下文提到的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)}"
}
}
答案 0 :(得分:0)
您需要将变量传递给模块,即
module "vpc"{
source = "modules/network/vpc"
vpccidr = "${var.vpccidr}"
vpcname = "${var.vpcname}"
}