I am hoping someone can help me. I have a list of objects that has nested lists of objects at the same level. I want to flatten the data to include pieces from all objects.
My variable looks like this:
databases = [
{
name = "DB1"
comment = "Test Terraform database"
data_retention_days = 1
environments = [
{
environment_prefixes = ["dev", "tst"]
snowflake_account = "ab1234"
}
]
schemas = [
{
schema_name = "X"
comment = ""
is_transient = false
is_managed = false
data_retention_days = 1
},
{
schema_name = "Y"
comment = ""
is_transient = false
is_managed = false
data_retention_days = 1
}]
}
]
I would like the output to be this:
dbs = {
"DB1|ab1234|X" = {
database_name = "DB1"
comment = ""
data_retention_days = 1
env_prefixes = [
"dev",
"tst",
]
snowflake_account = "ab1234"
schema_name = "X"
schema_comment = ""
schema_data_retention_days = 1
is_transient = false
is_managed = false
},
"DB1|ab1234|Y" = {
database_name = "DB1"
comment = ""
data_retention_days = 1
env_prefixes = [
"dev",
"tst",
]
snowflake_account = "ab1234"
schema_name = "Y"
schema_comment = ""
schema_data_retention_days = 1
is_transient = false
is_managed = false
}
}
I have gotten pretty far but what is throwing me off is that the environments and schemas are at the same level I am not sure how to bring those together.
This flattens everything required down to the schemas level and works fine:
database_schemas = {
for obj in flatten([
for db in var.databases : [
for schema in db.schemas : {
database_name = db.name
schema_name = schema.schema_name
schema_comment = schema.comment
is_transient = schema.is_transient
is_managed = schema.is_managed
data_retention_days = schema.data_retention_days
}
]
]) : "${obj.database_name}|${obj.schema_name}" => obj
}
This flattens everything down to the environments level and works fine:
database_environments = {
for obj in flatten([
for db in var.databases : [
for env in db.environments : {
database_name = db.name
env_prefixes = env.environment_prefixes
snowflake_account = env.snowflake_account
}
]
]) : "${obj.database_name}|${obj.snowflake_account}" => obj
}
Since environments is at the same level as schemas, I am wondering how I can combine those? Essentially for each environment I want all schemas. Any thoughts or ideas are more than welcome! I appreciate the help in advance!