【问题标题】:Terraform : merge list of maps and concatenate their value from duplicate keysTerraform:合并地图列表并从重复键中连接它们的值
【发布时间】:2021-06-17 15:58:52
【问题描述】:

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

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 看起来像是我的问题,但我无法适应我的情况。

感谢您的帮助。

【问题讨论】:

    标签: terraform terraform0.12+


    【解决方案1】:

    你可以这样做:

    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",
      ])
    }
    

    【讨论】:

    • 谢谢@Marcin!这正是我想要做的,并且 cmets 中的解释非常清楚。
    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 2019-03-17
    • 2015-02-18
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2018-10-14
    相关资源
    最近更新 更多