Terraform嵌套循环数组的对象在对象中的数组



只要在我的模块中输入这个


databases          = [
{
db_name = "test_0"
db_owner   = "testu_user_0",
extensions = ["unaccent"]
},
{
db_name = "test_db"
db_owner   = "test_user"
extensions = ["uuid_ossp","pg_trgm"]
}
]

然后我需要循环并进行特定的扩展。我怎样才能做到呢?

创建数据库非常简单

resource "postgresql_database" "db" {
for_each = {for db in var.databases : db.db_name => db}
name  = each.key
owner = postgresql_role.specific_role["${each.value.db_owner}"].name
lifecycle {
prevent_destroy = false
}
}

但是现在当涉及到扩展时,我很难做到这一点。我可以在网上看到一些例子,但是他们都使用对象和数组,而不是一个充满对象和嵌套数组的数组。

# resource "postgresql_extension" "uuid_ossp" {
#   for_each = {for db in var.databases : db.db_name => db}
#   name     = "uuid-ossp"
#   database = each.key
# }

请帮

你必须扁平化你的数据结构,例如在locals中,然后在postgresql_extension中使用它:

locals {
db_extentions = merge([
for db in var.databases : 
{
for ext in db.extensions: 
"${db.db_name}-${ext}" => {
db_name = db.db_name
db_owner = db.db_owner
extension = ext
}
}
]...) # <-- the dots are important! Don't remove them
}
resource "postgresql_extension" "uuid_ossp" {
for_each = local.db_extentions
name     = each.value.extension
database = each.value.db_name
}

三个点表示展开函数参数。