Files
tf_provider/HISTORY/2026-10-01_release_keep_on_destroy_subresources.md
T
Repinoid db69965520 docs(release): перезаливка 1.0.0/2.0.0/3.0.0 с keep_on_destroy + разбор грабель
- VERSIONS.md: три строки обновлены, добавлены первые 16 символов sha256 каждой сборки;
- HISTORY: что заливалось, как проверялось (схема 60/62 ресурсов, исключения —
  action-шаблон mongodb_rollback и рукописный service_operation), грабли
  checksum mismatch при той же версии + лечение, и найденный факт: state
  TEST_STAND/CRUD пуст (serial 38), инстансы в облаке помечены deleted.
2026-10-01 16:08:53 +03:00

5.9 KiB
Raw Blame History

2026-10-01 — Заливка провайдера во все три стенда с фичей keep_on_destroy для подресурсов

Команда владельца: «делай» (в ответ на «Запускать релизный цикл (01/02/03)?»). Версии не бампались — перезалиты те же 1.0.0 / 2.0.0 / 3.0.0 (как в релизе от 01.10, HISTORY/2026-10-01_release_x_0_0_all_stands.md).

Что заливалось

Фича keep_on_destroy для подресурсов (коммиты fefc200 — шаблон, 81b85a4 — доки, 8f6e096 — тест): при destroy подресурс (пользователь БД, база, топик и т.п.) не удаляется и не меняется в облаке, а только убирается из terraform state. Нужно там, где родительский инстанс при destroy не удаляется (suspend_on_destroy = true), иначе объект уйдёт из живого инстанса.

Как выполнено

export MC_CONFIG_DIR=/tmp/mc-cfg
./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/test 3.0.0
./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev  2.0.0
./TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/prod 1.0.0

03 сам выполняет 01 (YAML из API) → 02 (ресурсы+доки) → check_schema_names.sh → сборку 3 платформ → GPG-подпись → заливку.

Результат

Стенд Namespace Версия YAML sha256 залитого == локальному mtime 5 объектов
TEST nubes-test 3.0.0 36 ✅ 0e859ffd58fd5e7d… 15:51
DEV nubes-dev 2.0.0 40 ✅ 0d9897c2fdddff2b… 15:55
PROD nubes 1.0.0 36 ✅ e509ced2b11440fc… 15:58

Проверка API /versions: nubes → ['1.0.0'], nubes-test → ['3.0.0'], nubes-dev → ['2.0.0','2.0.1','2.0.21','2.0.22','2.0.23','2.0.24'].

Генерация по стендам: prod 36 yaml / 60 go / 297 docs, test 36/60/297, dev 40/65/327. Stale нет.

Проверка фичи в залитой сборке

Схема, полученная от реестра (terraform providers schema -json, test 3.0.0): из 62 ресурсов атрибут keep_on_destroy есть у 60. Исключения (оба — не подресурсы и не инстансы):

  • nubes_mongodb_rollback — action-ресурс (generated/test/go/92_mongodb_rollback_action.go, другой шаблон);
  • nubes_service_operation — рукописный ресурс provider/internal/resources_core/service_operation_resource.go.

Грабли: checksum mismatch при обновлении провайдера в стенде

После перезаливки версии с тем же номером terraform init -upgrade в TEST_STAND/CRUD не перекачал бинарник (осталась старая сборка b2ad147d40a4be96…), а после удаления .terraform/providers появилась Error: ... checksums previously recorded in the dependency lock file.

Причина: .terraform.lock.hcl фиксирует хэши; при той же версии Terraform не меняет выбор и не перечитывает пакет. Лечение:

cd TEST_STAND/CRUD
rm -f .terraform.lock.hcl        # файл не под git (проверено: git ls-files TEST_STAND/CRUD/)
rm -rf .terraform/providers
terraform init                   # скачивает новую сборку, создаёт lock заново

Результат: установлен бинарник c6cd7feb7ee5c868… (совпадает с залитым), terraform validate → Success.

⚠️ Найденное расхождение: state стенда TEST пуст, инстансы в облаке помечены deleted

Обнаружено при проверке применения keep_on_destroy.

Файл serial Ресурсов mtime
terraform.tfstate (текущий) 38 0 (resources: []) 15:43
terraform.tfstate.backup 31 6 (nubes_postgres.main_pg, nubes_postgres_user.crud_user_0, nubes_postgres_database.pg_db, nubes_flask.appflask, nubes_lucee.applucee, nubes_nodejs.appnodejs) 15:39

terraform plan после этого: 6 to add, 0 to change, 0 to destroy.

Состояние инстансов по API (/instances/<uid>) на момент проверки:

Инстанс serviceId explainedStatus dtState
pg4crud2 90 deleted (isDeleted: true, isSuspended: true) 16:05:51
crud-nodejs 95 deleted (isDeleted: true, isSuspended: true) 16:03:46
crud-lucee 94 deleted (isDeleted: true, isSuspended: true) 16:04:23
crud-flask 89 deleted (isDeleted: true, isSuspended: true) 15:40:30

Исполнитель (агент) terraform apply и terraform destroy не запускал — только init / validate / plan / state-чтение. Кто инициировал удаление инстансов — не установлено; решение о дальнейших шагах принимает владелец.

Связанные документы

  • HISTORY/2026-10-01_release_x_0_0_all_stands.md — предыдущая перезаливка тех же версий;
  • HISTORY/2026-10-01_test_crud_pg_create_failure.md — разбор сбоев создания PostgreSQL и пароля Vault;
  • VERSIONS.md — таблица версий (обновлена);
  • TEST_STAND/CRUD/postgres_user_db.tf — манифест с keep_on_destroy = true (коммит e8c03d8).