From db699655206918027ed52a113062f1305a67fce8 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Thu, 1 Oct 2026 16:08:53 +0300 Subject: [PATCH] =?UTF-8?q?docs(release):=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D0=B2=D0=BA=D0=B0=201.0.0/2.0.0/3.0.0=20?= =?UTF-8?q?=D1=81=20keep=5Fon=5Fdestroy=20+=20=D1=80=D0=B0=D0=B7=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=20=D0=B3=D1=80=D0=B0=D0=B1=D0=B5=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - VERSIONS.md: три строки обновлены, добавлены первые 16 символов sha256 каждой сборки; - HISTORY: что заливалось, как проверялось (схема 60/62 ресурсов, исключения — action-шаблон mongodb_rollback и рукописный service_operation), грабли checksum mismatch при той же версии + лечение, и найденный факт: state TEST_STAND/CRUD пуст (serial 38), инстансы в облаке помечены deleted. --- ...01_release_keep_on_destroy_subresources.md | 93 +++++++++++++++++++ VERSIONS.md | 6 +- 2 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 HISTORY/2026-10-01_release_keep_on_destroy_subresources.md diff --git a/HISTORY/2026-10-01_release_keep_on_destroy_subresources.md b/HISTORY/2026-10-01_release_keep_on_destroy_subresources.md new file mode 100644 index 0000000..4a51045 --- /dev/null +++ b/HISTORY/2026-10-01_release_keep_on_destroy_subresources.md @@ -0,0 +1,93 @@ +# 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`), иначе объект уйдёт из живого инстанса. + +## Как выполнено + +```bash +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 не меняет выбор +и не перечитывает пакет. Лечение: + +```bash +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/`) на момент проверки: + +| Инстанс | 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`). diff --git a/VERSIONS.md b/VERSIONS.md index ba4e647..e47324b 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -4,9 +4,9 @@ | Стенд | Namespace | Версия | Дата заливки | Примечание | |---|---|---|---|---| -| PROD | `nubes` | `1.0.0` | 2026-10-01 | **пересобран заново из текущего кода** (полный цикл 01→02→03, sha256 сверен) | -| DEV | `nubes-dev` | `2.0.0` | 2026-10-01 | **пересобран заново** (включает правки ядра, ранее ушли в `2.0.1`); в реестре также `2.0.1`, `2.0.21`–`2.0.24` | -| TEST | `nubes-test` | `3.0.0` | 2026-10-01 | **пересобран заново**, теперь с правками ядра | +| PROD | `nubes` | `1.0.0` | 2026-10-01 | **перезалит** (полный цикл 01→02→03) с фичей `keep_on_destroy` для подресурсов; sha256 сверен: `e509ced2b11440fc…` | +| DEV | `nubes-dev` | `2.0.0` | 2026-10-01 | **перезалит** с фичей `keep_on_destroy`; sha256 сверен: `0d9897c2fdddff2b…`; в реестре также `2.0.1`, `2.0.21`–`2.0.24` (не пересобирались) | +| TEST | `nubes-test` | `3.0.0` | 2026-10-01 | **перезалит** с фичей `keep_on_destroy`; sha256 сверен: `0e859ffd58fd5e7d…`; проверено схемой: атрибут есть у 60 из 62 ресурсов | > ⚠️ **Хранение в реестре (2026-09-30):** в dev-реестре (`nubes-dev/nubes`) версии > `2.0.0`–`2.0.20` были удалены физически (бакет un-versioned).