I am trying to output values for an object which is a combination of a map and list. The output will be a combination of policy’s and all its values.
I was referring to following discussion to figure it out
However, my requirements are a bit different as you can see below:
Variable Object looks like this:
variable iam-policy-users-map {
default = {
# following dataset does not work
"policy3" = [{ key1 = "value1", key2 = "value2" }, { key1 = "value3", key2 = "value4" }]
"policy4" = [{ key1 = "value5", key2 = "value6" }, { key1 = "value7", key2 = "value8" }]
"policy5" = { key1 = "value5", key2 = "value6" }
}
}
I would like to output all the policies, with its keys and value which is list(map) e:g
policy3_value1_value2
policy3_valu31_value4
policy4_value5_value6
policy4_value7_value8
policy5_value5_value6
Foll is my local definition:
locals {
user_policy_pairs = flatten([
for policy, users in var.iam-policy-users-map : [ #list
for value1, value2 in users : { # map
policy = policy
value1 = value1
value2 = value2
}
]
])
Foll is the output I have which does not show the output.
output "association-map" {
value = {
for obj in local.user_policy_pairs :
"${obj.policy}_${obj.value1}_${obj.value2}" => [obj.policy, obj.value1, obj.value2]
}
}
Instead, I get foll error:
obj.value2 is object with 2 attributes
Eventually, I want to use the object to create dynamic content in following manner:
resource "resourcename" r1{
....
....
dynamic "element"{
for_each=local.user_policy_pairs
iterator=next
}
content {
policy = next.value.policy
value1 = next.value.value1
value2 = next.value.value2
}
}
...
...
Can someone help?