test_stand/crud: keep_on_destroy=true для пользователя и базы PostgreSQL
Инстанс PG при destroy уходит в Suspend (suspend_on_destroy_default: true в 90_postgres.yaml), а не удаляется. Без keep_on_destroy подресурсы (create_user/ create_database) удалялись бы из живого кластера — после resume приложения работали бы с пустой БД, данные базы были бы потеряны. keep_on_destroy=true → режим state_only: при destroy подресурс остаётся в облаке и только убирается из state. В паре с adopt_existing_on_create=true следующий apply усыновляет существующий объект, а не падает на 'уже существует'. Проверено: terraform validate — Success (провайдером 3.0.0, где атрибут есть).
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user