类型映射的变量插值



升级到terraform v0.12.2,大多数事情都停止了正常工作。(我的错,我没有检查此页面:升级前 https://www.terraform.io/upgrade-guides/0-12.html)

无论如何,修复了大部分问题,但类型map的变量插值仍然不起作用。 在 v012.x 之前,这将完美运行:

security_groups.tf

// SecurityGroup: default access
resource "aws_security_group" "default" {
count        = "${length(var.s_zones)}"
vpc_id       = "${element(aws_vpc.vpcs.*.id, count.index)}"
name         = "${var.vpc_names[count.index]}-default"
ingress {
from_port   = 22
to_port     = 22
protocol    = "tcp"
cidr_blocks = ["${var.vpn_cidrs["lan"]}",
"${var.vpn_cidrs["ovp"]}"]
description = "SSH from vpn"
}
}

vars.tf

// Variable: vpn_cidrs
variable "vpn_cidrs" {
type = "map"
default = {
lan = ["10.0.11.0/28", "10.0.12.0/28"]
ovp = ["10.1.13.0/28", "10.1.14.0/28"]
}
}

在 v0.12.2 中,它返回:

错误:属性值类型不正确

上。。/../modules/vpc/security_groups.tf 第 55 行,在资源中 "aws_security_group"默认值":55:cidr_blocks = ["${var.vpn_cidrs["lan"]}",

属性"cidr_blocks"的值不合适:元素 0:字符串 必填。

我尝试使用新的构造函数:

// Variable: vpn_cidrs
variable "vpn_cidrs" {
type = map(string)
default = {
lan1 = "10.0.11.0/28",
lan2 = "10.0.12.0/28",
ovp1 = "10.1.13.0/28",
ovp2 = "10.1.14.0/28",
}
}

但是后来我无法弄清楚如何将其用于模块中的 SG 规则。有人知道我错过了什么或如何解决这个问题?从周五晚上开始就真的卡住了。任何指向的示例代码将不胜感激。

-S

"${var.vpn_cidrs["lan"]}"返回列表["10.0.11.0/28", "10.0.12.0/28"],但需要字符串作为错误消息状态。

尝试使用"${join(", ", var.vpn_cidrs["lan"])}"生成字符串10.0.11.0/28, 10.0.12.0/28

要生成两个列表vpn_cidrs["lan">] 和vpn_cidrs["ovp"]的组合列表,请使用concat()函数(请参阅此处)。

cidr_blocks = "${concat(var.vpn_cidrs["lan"], var.vpn_cidrs["ovp"])}"

这会产生["10.0.11.0/28", "10.0.12.0/28", "10.1.13.0/28", "10.1.14.0/28"]

最新更新