升级到terraform v0.12.2,大部分东西停止了直线工作。(我的错,我没有检查这个页面:升级前的https://www.terraform.io/upgrade-guides/0-12.html )
无论如何,修正了大多数事情,但变量插值类型map仍然不起作用。在pre-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"]
}
}使用0.12.2,它返回:
错误:属性值类型不正确 在资源"aws_security_group“"default":55 : cidr_blocks =[${var.vpn_cidrs”lan“}”“中的./../模块/vpc/security_groups.tf第55行, 属性“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
发布于 2019-06-23 14:26:27
"${var.vpn_cidrs["lan"]}"返回list ["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"]
https://stackoverflow.com/questions/56723402
复制相似问题