Reputation: 348
Hi there is there any neat way to convert a list(map(list(map(string)))) into a map(list(map(string))) with terraform .
Here's what my input structure looks like
`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"
}
]
}
]
}`
and here's what i want it to look like
`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"
}
]
}
Can you guys help me achieve this please ? Ps : preferably in the locals part
Upvotes: 2
Views: 1523
Reputation: 349
Then, how about this?
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])
}
}
I hope this will help.
Upvotes: 3