mirror of
https://gitlab.sarex.io/infra/terraform-contour-mirror.git
synced 2026-08-06 02:31:35 +03:00
65 lines
1.8 KiB
HCL
65 lines
1.8 KiB
HCL
locals {
|
||
databases_map = { for db in var.databases : "${db.cluster_id}:${db.database.name}:${db.user.name}" => db }
|
||
}
|
||
|
||
resource "random_password" "user_password" {
|
||
for_each = local.databases_map
|
||
|
||
length = try(each.value.user.password_length, 32)
|
||
special = try(each.value.user.password_special, false)
|
||
upper = true
|
||
lower = true
|
||
numeric = true
|
||
|
||
lifecycle {
|
||
ignore_changes = all
|
||
}
|
||
}
|
||
|
||
data "yandex_mdb_postgresql_cluster" "existing" {
|
||
for_each = toset([for db in var.databases : db.cluster_id])
|
||
cluster_id = each.value
|
||
}
|
||
|
||
resource "yandex_mdb_postgresql_user" "this" {
|
||
for_each = local.databases_map
|
||
|
||
cluster_id = each.value.cluster_id
|
||
name = each.value.user.name
|
||
password = random_password.user_password[each.key].result
|
||
conn_limit = try(each.value.user.conn_limit, 10)
|
||
|
||
# Permissions только на ДРУГИЕ существующие БД
|
||
# Permission на свою БД НЕ добавляем - owner получает доступ автоматически
|
||
# и БД ещё не существует на момент создания user
|
||
dynamic "permission" {
|
||
for_each = distinct(compact(try(each.value.user.permissions, [])))
|
||
content {
|
||
database_name = permission.value
|
||
}
|
||
}
|
||
|
||
lifecycle {
|
||
ignore_changes = [password, permission, generate_password]
|
||
}
|
||
}
|
||
|
||
resource "yandex_mdb_postgresql_database" "this" {
|
||
for_each = local.databases_map
|
||
|
||
cluster_id = each.value.cluster_id
|
||
name = each.value.database.name
|
||
owner = yandex_mdb_postgresql_user.this[each.key].name
|
||
lc_collate = try(each.value.database.lc_collate, "en_US.UTF-8")
|
||
lc_type = try(each.value.database.lc_type, "en_US.UTF-8")
|
||
|
||
depends_on = [yandex_mdb_postgresql_user.this]
|
||
|
||
dynamic "extension" {
|
||
for_each = try(each.value.database.extensions, [])
|
||
content {
|
||
name = extension.value
|
||
}
|
||
}
|
||
}
|