升级到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"]