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.
This commit is contained in:
Repinoid
2026-10-01 16:08:53 +03:00
parent e8c03d8ded
commit db69965520
2 changed files with 96 additions and 3 deletions
@@ -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/<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`).
+3 -3
View File
@@ -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).