【问题标题】:Converting a list(map(list(map(string)))) into a map(list(map(string))) with terraform使用 terraform 将 list(map(list(map(string)))) 转换为 map(list(map(string)))
【发布时间】:2020-04-28 14:45:33
【问题描述】:

您好,有什么巧妙的方法可以使用 terraform 将 list(map(list(map(string)))) 转换为 map(list(map(string)))。

这是我的输入结构的样子

`variable "data" {
  type = list(map(list(map(string))))
  default = [
    {
      secrets = [
        {
          secret-name   = "secret1"
          secret-label  = "label1"
        },
        {
          secret-name   = "secret2"
          secret-label  = "label2"
        }
      ],
      config-maps = [
        {
          config-map-name =  "conf1"
          java-options    = "-Xmx256m"
          config-label    = "develop"
        }
      ]
    },
    {
      secrets = [
        {
          secret-name   = "secret3"
          secret-label  = "label3"
        }
      ],
      config-maps = [
        {
          config-map-name =  "conf2"
          java-options = "-Xmx256m"
          config-label = "develop"
        }
      ]
    }
  ]
}`

这就是我想要的样子

`data = {
        secrets     = [
                        {
                          secret-name   = "secret1"
                          secret-label  = "label1"
                        },
                        {
                          secret-name   = "secret2"
                          secret-label  = "label2"
                        },
                        {
                          secret-name   = "secret3"
                          secret-label  = "label3"
                        },
                      ],
        config-maps = [
                        {
                          config-map-name =  "conf1"
                          java-options    = "-Xmx256m"
                          config-label    = "develop"
                        },
                        {
                          config-map-name =  "conf2"
                          java-options = "-Xmx256m"
                          config-label = "develop"
                        }
                      ]
      }

你们能帮我实现这个吗? Ps : 最好在当地人的部分

【问题讨论】:

    标签: terraform


    【解决方案1】:

    那么,这个怎么样?

    locals {
      values = flatten([
        for d in var.data : [
          for _, v in d : v
        ]
      ])
      keys = flatten([
        for d in var.data : [
          for k, v in d : [
            for _ in v : k
          ]
        ]
      ])
    }
    
    output data {
      value = {
        for k in distinct(local.keys) :
        k => matchkeys(local.values, local.keys, [k])
      }
    }
    
    

    我希望这会有所帮助。

    【讨论】:

    • 嘿,可以输入输出结构吗?例如:变量“secret-data”{ type = list(object({ secret-name = string secret-label = string username = number password= number })) }
    • 你可以将类型定义为map(list(map(string)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2015-11-21
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2021-02-28
    • 2022-09-30
    相关资源
    最近更新 更多