diff --git a/TEST_STAND/CRUD/postgres_user_db.tf b/TEST_STAND/CRUD/postgres_user_db.tf index cb6c72b..a62687f 100644 --- a/TEST_STAND/CRUD/postgres_user_db.tf +++ b/TEST_STAND/CRUD/postgres_user_db.tf @@ -1,11 +1,39 @@ # ============================================================================= # PostgreSQL — пользователи и базы данных # ============================================================================= +# +# ЗАЧЕМ ЗДЕСЬ keep_on_destroy = true (не удалять подресурс при destroy): +# +# У самого кластера PostgreSQL режим по умолчанию — suspend_on_destroy = true +# (generated/test/resources_yaml/90_postgres.yaml → lifecycle.suspend_on_destroy_default: true). +# То есть `terraform destroy` НЕ удаляет кластер в облаке, а переводит его в Suspend. +# +# Пользователь и база — это отдельные операции (create_user / create_database), +# и по умолчанию при destroy Terraform выполнил бы delete_user / delete_database. +# Получилось бы расхождение: кластер в облаке жив (Suspend), а пользователь и база +# из него удалены. После resume приложения работали бы с пустой БД, а следующий apply +# создавал бы всё заново (для базы это потеря данных). +# +# keep_on_destroy = true переводит подресурс в режим state_only: при destroy он +# НЕ удаляется и НЕ меняется в облаке, а только убирается из terraform state. +# Провайдер печатает предупреждение «Подресурс оставлен как есть, а не удалён». +# +# Пара к keep_on_destroy = true обязательна: +# adopt_existing_on_create = true — иначе следующий `terraform apply` попытается +# СОЗДАТЬ уже существующие в облаке пользователя/базу и получит ошибку «уже существует». +# С true провайдер усыновляет существующий объект обратно в state (авто-import). +# +# Как удалить по-настоящему: выставить keep_on_destroy = false и выполнить apply/destroy — +# пойдут обычные delete_user / delete_database. +# ============================================================================= + resource "nubes_postgres_user" "crud_user_0" { postgres_id = nubes_postgres.main_pg.id username = local.pg_username role = local.pg_role adopt_existing_on_create = true + # destroy: пользователя из кластера не удалять (кластер уходит в Suspend, а не удаляется) + keep_on_destroy = true } resource "nubes_postgres_database" "pg_db" { @@ -13,4 +41,6 @@ resource "nubes_postgres_database" "pg_db" { db_name = local.pg_db_name db_owner = nubes_postgres_user.crud_user_0.username adopt_existing_on_create = true + # destroy: базу из кластера не удалять — иначе данные пропадут после resume + keep_on_destroy = true }