From ba3887fa690920c2c1c4c6121e3968b5b382c3a1 Mon Sep 17 00:00:00 2001 From: Nail Date: Thu, 24 Sep 2026 19:07:06 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80?= =?UTF-8?q?=D1=83=D1=8E=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20freeze-on-destroy=20(=D0=B3=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D0=BE=D1=80=2022c6c83,=20=D0=BA=D0=BE=D0=BD?= =?UTF-8?q?=D1=84=D0=B8=D0=B3=20=D1=81=D1=82=D0=B5=D0=BD=D0=B4=D0=B0=2040a?= =?UTF-8?q?ef87)=20=D0=B8=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D1=87=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=20dev=5Foverrides?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._shturval_dev00_adopt_and_freeze_design.md | 2 + ...DEV00_DIAG_AND_FREEZE_DESIGN_2026-09-24.md | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/HISTORY/2026-09-24_shturval_dev00_adopt_and_freeze_design.md b/HISTORY/2026-09-24_shturval_dev00_adopt_and_freeze_design.md index 70ea054..e4248cb 100644 --- a/HISTORY/2026-09-24_shturval_dev00_adopt_and_freeze_design.md +++ b/HISTORY/2026-09-24_shturval_dev00_adopt_and_freeze_design.md @@ -10,6 +10,8 @@ |---|---|---| | `adopt_existing_on_create = true` для кластера Штурвала (иначе apply падал на существующем suspended-инстансе) | `DEV_STAND/FullPipe/shturval.tf` | `57abb7b` | | Документация сессии (диагностика + дизайн freeze) | `NOTES/30_analysis/…`, `NOTES/40_chat_summaries/…` | `3df93ad` | +| Универсальный третий режим destroy `keep_on_destroy` (`state_only`) для всех instance-ресурсов + предупреждения в `Delete` | `TOOLS/resource-generator/{types.go,loader.go,templates/instance.go}` | `22c6c83` | +| Режим «заморозки» в конфиге стенда: `keep_on_destroy=true` (эдж/SNAT/квота IP), adopt для эджа, явный `suspend_on_destroy` у кластера | `DEV_STAND/FullPipe/{edge.tf,modifiers.tf,shturval.tf}` | `40aef87` | Бэкап перед правкой: `TMP/backup_2026-09-24/shturval.tf.before-adopt`. diff --git a/NOTES/30_analysis/SHTURVAL_DEV00_DIAG_AND_FREEZE_DESIGN_2026-09-24.md b/NOTES/30_analysis/SHTURVAL_DEV00_DIAG_AND_FREEZE_DESIGN_2026-09-24.md index 65424d2..0cce0ff 100644 --- a/NOTES/30_analysis/SHTURVAL_DEV00_DIAG_AND_FREEZE_DESIGN_2026-09-24.md +++ b/NOTES/30_analysis/SHTURVAL_DEV00_DIAG_AND_FREEZE_DESIGN_2026-09-24.md @@ -175,6 +175,46 @@ SNAT останется включённым (Delete при `keep=true` печа --- +## 5.1. Реализовано (вечер 24.09) + +**Генератор (коммит `22c6c83`):** + +- `TOOLS/resource-generator/internal/types/types.go` — в `ServiceSpec.Lifecycle` добавлен `KeepOnDestroyDefault *bool` + (`yaml:"keep_on_destroy_default"`), в `GenResource` — `KeepOnDestroy bool`. +- `TOOLS/resource-generator/internal/loader/loader.go` — читает ключ из YAML (дефолт `false`) и передаёт в генератор. +- `TOOLS/resource-generator/internal/templates/instance.go` — атрибут `keep_on_destroy` (Optional+Computed, дефолт из YAML) + во всех instance-ресурсах; в `Delete` режим выбирается так: `keep_on_destroy` → `state_only` (приоритет), + иначе `suspend_on_destroy` (где сервис умеет) → `suspend`, иначе `delete`; после успешного удаления печатаются + предупреждения «Ресурс заморожен, а не удалён» / «Ресурс оставлен как есть, а не удалён». +- Флаг получили **все 40 instance-ресурсов** (проверено: `grep -l keep_on_destroy generated/dev/go/*_resource.go`). + Subresource-ресурсы (пользователи/БД/бэкапы) — без него: другой шаблон, у них нет своего suspend. + +**YAML-спеки не правим:** `01_generate_yamls.sh` перезаписывает `generated//resources_yaml/*.yaml` из API, +поэтому ручной ключ там не живёт. Ключ `keep_on_destroy_default` поддержан, но не используется: +дефолт `false` берётся из нулевого значения Go. + +**Проверка:** + +- `02_generate_resources_and_docs_v2.sh --profile TOOLS/config/dev` → `dev-materialize.sh dev` → + `go build ./...` в `provider/` — OK, `go test ./...` — OK. +- Локальная проверка конфига без релиза: собран свой бинарь в `TMP/devbin/`, `dev_overrides` — + `TMP/terraformrc.dev`; `TF_CLI_CONFIG_FILE=TMP/terraformrc.dev terraform validate` — Success, + `terraform plan` — `0 to add, 5 to change, 0 to destroy`, у ресурсов меняется только новый + атрибут (`keep_on_destroy = false -> true` у квоты, `+ keep_on_destroy = false` у vDC/кластера/эджа/SNAT) плюс + пересчёт outputs. + +**Конфиг стенда (коммит `40aef87`):** `modifiers.tf` — `keep_on_destroy = true` у квоты IP (`:31`) и SNAT (`:42`); +`edge.tf` — `keep_on_destroy = true` (`:23`) + `adopt_existing_on_create = true` (`:27`); +`shturval.tf` — явные `adopt_existing_on_create = true` (`:113`) и `suspend_on_destroy = true` (`:117`); +у vDC в `vdc.tf:17,19` оба флага уже были. + +**Что осталось:** собрать и залить новую версию провайдера (`03_build_and_upload_provider.sh --profile TOOLS/config/dev <версия>`, +текущая релизная — `2.0.21`), иначе `validate/plan` со штатным провайдером ругаются на `keep_on_destroy` +(Unsupported argument) и стенд не применить. Только после релиза — проверка цикла destroy(freeze) → apply(unfreeze) +на живом стенде (apply — за пользователем). + +--- + ## 6. Мои ошибки в этой сессии (обязательно к фиксации) 1. Сказал, что apply «либо даст ошибку, либо создаст дубль кластера» — **неверно**: будет hard error