# 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`).