Terraform 类型映射的变量插值

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”]}” 属性“

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

属性“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"])}"