Files
tf_provider/TEST_STAND/CRUD/pg/postgres_user_db.tf
T
Repinoid 4834e992f3 test_stand/crud: разделение на pg/ (общая БД) и apps/ (потребители)
Было: одна папка, один state — destroy убивал и БД, и приложения; пароль БД
приходилось вытаскивать костылём try() в одном apply, приложения поднимались
с пустым PGPASSWORD.

Стало:
- pg/  — кластер PostgreSQL + пользователь + база + outputs (хост/порт/юзер/база/пароль);
  destroy здесь переводит кластер в Suspend, а пользователь и база не удаляются
  (keep_on_destroy = true + adopt_existing_on_create = true);
- apps/ — три приложения-потребителя; креды БД читаются из creds.json (выгрузка
  outputs папки pg/, т.к. state раздельные, а data-source у провайдера нет);
  try() убран полностью — пароль к моменту этого apply уже существует;
- apps/.gitignore — creds.json, terraform.tfvars, state/lock;
- README.md переписан: структура, «зачем разделено», пошаговые 3 шага запуска,
  повседневные операции (destroy приложений не трогает БД), про destroy базы.

Проверено: terraform init+validate в обеих папках — Success;
plan в pg/ — 3 to add (кластер, пользователь, база) + 6 outputs.
2026-10-01 16:35:14 +03:00

37 lines
2.3 KiB
Terraform
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# PG — пользователь и база данных
# =============================================================================
#
# Пользователь и база создаются отдельными операциями (create_user / create_database)
# внутри кластера, который создал nubes_postgres.main_pg.
#
# ЗАЧЕМ keep_on_destroy = true (не удалять подресурс при destroy):
# - у кластера suspend_on_destroy_default = true ⇒ при destroy кластер уходит в
# Suspend, а НЕ удаляется;
# - по умолчанию же при destroy подресурс выполнил бы delete_user / delete_database —
# получилось бы расхождение: кластер в облаке жив, а юзер/база удалены (база = потеря данных);
# - keep_on_destroy = true ⇒ подресурс при destroy НЕ удаляется и НЕ меняется в облаке,
# только убирается из state. Провайдер печатает предупреждение «Подресурс оставлен как есть».
#
# Пара к keep_on_destroy = true обязательна:
# adopt_existing_on_create = true — иначе повторный apply попытается СОЗДАТЬ уже
# существующего юзера/базу и упадёт с «уже существует». С true провайдер усыновляет
# существующий объект обратно (авто-import).
# =============================================================================
resource "nubes_postgres_user" "crud_user_0" {
postgres_id = nubes_postgres.main_pg.id
username = var.pg_username
role = var.pg_role
adopt_existing_on_create = true
keep_on_destroy = true
}
resource "nubes_postgres_database" "pg_db" {
postgres_id = nubes_postgres.main_pg.id
db_name = var.pg_db_name
db_owner = nubes_postgres_user.crud_user_0.username
adopt_existing_on_create = true
keep_on_destroy = true
}