Terraform 类型映射的变量插值
升级到terraform v0.12.2,大部分设备停止正常工作。(我的错,我没有检查此页面:升级前) 无论如何,修复了大部分问题,但是Terraform 类型映射的变量插值,terraform,Terraform,升级到terraform v0.12.2,大部分设备停止正常工作。(我的错,我没有检查此页面:升级前) 无论如何,修复了大部分问题,但是map类型的变量插值仍然不起作用。在v012.x之前的版本中,这将非常有效: 安全组.tf vars.tf 对于v0.12.2,它返回: 错误:属性值类型不正确 在资源中的.././modules/vpc/security_groups.tf第55行 “aws_安全组”“默认值”:55:cidr_块= [“${var.vpn_cidrs[“lan”]}” 属性“
map
类型的变量插值仍然不起作用。在v012.x之前的版本中,这将非常有效:
安全组.tf
vars.tf
对于v0.12.2,它返回:
错误:属性值类型不正确
在资源中的.././modules/vpc/security_groups.tf第55行
“aws_安全组”“默认值”:55:cidr_块=
[“${var.vpn_cidrs[“lan”]}”
属性“cidr_块”的值不正确:元素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_CIDR[“lan”]和vpn_CIDR[“ovp”]两个列表的组合列表,请使用concat()
函数(请参阅)
这将生成
[“10.0.11.0/28”、“10.0.12.0/28”、“10.1.13.0/28”、“10.1.14.0/28”]
不,它不起作用,只需从变量vpn_cidrs或入口{}中删除[/code>规则。已经尝试过了。除非我在这里严重遗漏了什么。谢谢@rflume!这似乎有效,但不确定何时将强制执行map(string)
变量类型。在相关问题上,不要使用[lan]
,[ovp]
静态而言,是否有一种方法可以动态获取所有密钥?其目的是将其作为一个共享模块,以便不同的团队可以使用自己的密钥/值对集。
// 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"]
}
}
// 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",
}
}
cidr_blocks = "${concat(var.vpn_cidrs["lan"], var.vpn_cidrs["ovp"])}"