将列表转换为地图,并使用terraform中的计数键

将列表转换为地图,并使用terraform中的计数键,terraform,Terraform,我正在尝试将项目列表转换为地图 键应与项中的键匹配,并使用相同的键在每个元素上递增 也许一个例子更容易理解 variable "list" { type = list(map(string)) default = [ { a : "a", k : "node" }, { a : "b", k : "node" }, { a : "c", k :

我正在尝试将项目列表转换为地图

键应与项中的键匹配,并使用相同的键在每个元素上递增

也许一个例子更容易理解

variable "list" {
  type = list(map(string))
  default = [
    { a : "a", k : "node" },
    { a : "b", k : "node" },
    { a : "c", k : "master" },
    { a : "d", k : "master" }
  ]
}
    
// Output wanted
// {
//  "node-0" : {a: a},
//  "node-1" : {a: b},
//  "master-0" : {a: c},
//  "master-1" : {a: d}
// }

谢谢

我已经准备好了,
不太漂亮
实现这一点的方法。也许有更多的时间可以找到更好的解决方案,但至少可以将其视为迈向解决方案的第一步

这样做的目的是创建一个
助手图
,与前面的问题相同。通过对键和值的一点操作,可以实现结果

variable "list" {
  type = list(map(string))
  default = [
    { a : "a", k : "node" },
    { a : "b", k : "node" },
    { a : "c", k : "master" },
    { a : "d", k : "master" }
  ]
}

locals {

  helper_map = {for idx,item in var.list: item["k"] => {a = item["a"]}...}
  
  final_map  = {for v1 in flatten([
                  for key, item in local.helper_map: [
                    for idx, val in item:  {
                      "${key}-${idx}" = val
                    }  
                  ]  
                ]): keys(v1)[0] => values(v1)[0]}  
}


output "test2" {
  value = local.final_map
}
结果:

test2 = {
  "master-0" = {
    "a" = "c"
  }
  "master-1" = {
    "a" = "d"
  }
  "node-0" = {
    "a" = "a"
  }
  "node-1" = {
    "a" = "b"
  }
}

我准备了,
不太漂亮
实现这一点的方法。也许有更多的时间可以找到更好的解决方案,但至少可以将其视为迈向解决方案的第一步

这样做的目的是创建一个
助手图
,与前面的问题相同。通过对键和值的一点操作,可以实现结果

variable "list" {
  type = list(map(string))
  default = [
    { a : "a", k : "node" },
    { a : "b", k : "node" },
    { a : "c", k : "master" },
    { a : "d", k : "master" }
  ]
}

locals {

  helper_map = {for idx,item in var.list: item["k"] => {a = item["a"]}...}
  
  final_map  = {for v1 in flatten([
                  for key, item in local.helper_map: [
                    for idx, val in item:  {
                      "${key}-${idx}" = val
                    }  
                  ]  
                ]): keys(v1)[0] => values(v1)[0]}  
}


output "test2" {
  value = local.final_map
}
结果:

test2 = {
  "master-0" = {
    "a" = "c"
  }
  "master-1" = {
    "a" = "d"
  }
  "node-0" = {
    "a" = "a"
  }
  "node-1" = {
    "a" = "b"
  }
}

@XciD修改了答案。我介绍了
local.final\u map
。有了它,在需要它的资源中,它应该更容易与每个一起使用。@XciD修改了答案。我介绍了
local.final\u map
。有了它,在需要它的资源中为每个使用它应该更容易。