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:
@@ -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`).
|
||||
Reference in New Issue
Block a user