docs: фиксирую реализацию freeze-on-destroy (генератор 22c6c83, конфиг стенда 40aef87) и порядок проверки через dev_overrides
This commit is contained in:
@@ -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`.
|
||||
|
||||
|
||||
@@ -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/<stand>/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
|
||||
|
||||
Reference in New Issue
Block a user