通过环境变量文件.tfvars

时间:2018-09-24 20:31:30

标签: terraform

如何传递variable.tf类型为“ list”或“ map”的变量的值。下文提到的input.tfvars文件中的语法是否有错误?

目标是不对variables.tfmain.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)}"
  }
}          

1 个答案:

答案 0 :(得分:0)

您需要将变量传递给模块,即

module "vpc"{
  source = "modules/network/vpc"

  vpccidr = "${var.vpccidr}"
  vpcname = "${var.vpcname}"
}