Terraform:合并地图列表并连接重复键中的值

Dav*_*vid 6 terraform terraform0.12+

我想连接共享相同键的映射列表的值。我有一个如下所示的地图列表:

tags = [
  {
    key = "env"
    value = "dev"
  },
  {
    key = "project"
    value = "tata"
  },
  {
    key = "env"
    value = "prod"
  },
  {
    key = "project"
    value = "tata"
  },
  {
    key = "project"
    value = "titi"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想按以下方式转换它。

tags = [
  {
    key = "env"
    value = ["dev", "prod"]
  },
  {
    key = "project"
    value = ["tata", "titi"]
  }
]
Run Code Online (Sandbox Code Playgroud)

或者更好的是,像这样:

tags = {
    env = ["dev", "prod"]
    project = ["tata", "titi"]
  }
Run Code Online (Sandbox Code Playgroud)

这篇文章看起来像我的问题,但我无法将其适应我的情况。

感谢您的帮助。

Mar*_*cin 5

您可以按如下方式执行此操作:

variable "tags" {

  default = [
  {
    key = "env"
    value = "dev"
  },
  {
    key = "project"
    value = "tata"
  },
  {
    key = "env"
    value = "prod"
  },
  {
    key = "project"
    value = "tata"
  },
  {
    key = "project"
    value = "titi"
  }
]


}

locals {

  keys_available = distinct([for tag in var.tags: tag["key"]])
  
  # with duplicate values
  helper_map = merge([for key in local.keys_available:
                  {for tag in var.tags:
                     key => tag["value"]... if tag["key"] == key
                  }  
               ]...)
  # duplicates removed  
  final_map = {for k,v in local.helper_map: k => distinct(v)}
}

output "test" {
  value = local.final_map
}
Run Code Online (Sandbox Code Playgroud)

给出:

test = {
  "env" = tolist([
    "dev",
    "prod",
  ])
  "project" = tolist([
    "tata",
    "titi",
  ])
}
Run Code Online (Sandbox Code Playgroud)