已升级到terraform v0.12.2,大多数事情都无法直接进行。 (很糟糕,我没有在升级前检查此页面:https://www.terraform.io/upgrade-guides/0-12.html)
无论如何,大多数问题都已解决,但是map
类型的变量插值仍然无法正常工作。在v012.x之前的版本中,这将非常完美:
// 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"
}
}
// 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
答案 0 :(得分:1)
"${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()
函数(请参见here。
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"]