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

Terraform : merge list of maps and concatenate their value from duplicate keys

我想连接共享同一键的地图列表的值。 我有一个看起来像这样的地图列表:

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

我想用下面的方式转换它。

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

或者更好的是,像这样:

tags = {
    env = ["dev", "prod"]
    project = ["tata", "titi"]
  }

This post 看起来像我的问题,但我无法适应我的情况。

感谢您的帮助。

您可以按如下方式进行:

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
}

给出:

test = {
  "env" = tolist([
    "dev",
    "prod",
  ])
  "project" = tolist([
    "tata",
    "titi",
  ])
}