如何在嵌套 for 循环中使用省略号 (...)

wan*_*rer 2 terraform

我看到此错误“如果需要重复,请在值表达式后使用省略号 (...) 以启用按键分组。”

locals {
  key_id = {
    for x in var.security_rules :
  "${x.type}" => x}
}
Run Code Online (Sandbox Code Playgroud)

是否可以在该循环的嵌套中使用省略号,我该怎么做?

Erv*_*gyi 9

该错误消息意味着var.security_rules有多个相同类型的项目。例如:

variable "security_rules" {
  default = [
    {
      type = "a"
    },
    {
      type = "b"
    },
    {
      type = "a"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我们可以看到至少有 2 个项目具有相同的type,这不会被接受为地图中的键。我们在这里可以做的是将具有相同的项目分组type。这正是ellipsis (...)将要实现的目标。所以:

locals {
  key_id = {
  for x in var.security_rules : "${x.type}" => x... }
}
Run Code Online (Sandbox Code Playgroud)

本例中的值key_id将是:

key_id = {
  "a" = [
    {
      "type" = "a"
    },
    {
      "type" = "a"
    },
  ]
  "b" = [
    {
      "type" = "b"
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)