From 81b85a4dea884f2173d6e3629f1fe13391cc0353 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Thu, 1 Oct 2026 15:45:15 +0300 Subject: [PATCH] =?UTF-8?q?docs-generator:=20keep=5Fon=5Fdestroy=20=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20(=D0=BF=D0=BE=D0=B4=D1=80=D0=B5=D1=81=D1=83?= =?UTF-8?q?=D1=80=D1=81=D1=8B=20+=20=D0=B8=D0=BD=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D1=81=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - у подресурсов появился раздел «Поведение при destroy» с таблицей флагов (keep_on_destroy / skip_missing_on_delete / adopt_existing_on_create) и предупреждением про расхождение state и облака; - в блоке destroy у инстансовых ресурсов добавлен keep_on_destroy (раньше не документировался вообще ни на одной странице); - в types добавлено поле Lifecycle.KeepOnDestroyDefault. Проверено генерацией: keep_on_destroy упоминается на 49 страницах test-стенда, включая postgres_user.md (подресурс) и postgres_params_create.md (инстанс). --- TOOLS/docs-generator/internal/types/types.go | 1 + TOOLS/docs-generator/internal/writers/writers.go | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/TOOLS/docs-generator/internal/types/types.go b/TOOLS/docs-generator/internal/types/types.go index 41d7a28..883458e 100644 --- a/TOOLS/docs-generator/internal/types/types.go +++ b/TOOLS/docs-generator/internal/types/types.go @@ -62,6 +62,7 @@ type ServiceSpec struct { Lifecycle struct { SuspendOnDestroyDefault bool `yaml:"suspend_on_destroy_default"` AdoptExistingOnCreateDefault bool `yaml:"adopt_existing_on_create_default"` + KeepOnDestroyDefault bool `yaml:"keep_on_destroy_default"` } `yaml:"lifecycle"` Outputs struct { Params []OutputParam `yaml:"params"` diff --git a/TOOLS/docs-generator/internal/writers/writers.go b/TOOLS/docs-generator/internal/writers/writers.go index 2e7935d..f6cc4b0 100644 --- a/TOOLS/docs-generator/internal/writers/writers.go +++ b/TOOLS/docs-generator/internal/writers/writers.go @@ -396,11 +396,12 @@ func buildCreateParamsPage(spec types.ServiceSpec, nav string, version string) s lifecycle := spec.Lifecycle if lifecycle.SuspendOnDestroyDefault || lifecycle.AdoptExistingOnCreateDefault { b.WriteString("\n!!! danger \"Важно: поведение при destroy\"\n") - b.WriteString(fmt.Sprintf(" По умолчанию: `suspend_on_destroy = %s`, `adopt_existing_on_create = %s`.\n", formatBoolTitle(lifecycle.SuspendOnDestroyDefault), formatBoolTitle(lifecycle.AdoptExistingOnCreateDefault))) + b.WriteString(fmt.Sprintf(" По умолчанию: `suspend_on_destroy = %s`, `adopt_existing_on_create = %s`, `keep_on_destroy = %s`.\n", formatBoolTitle(lifecycle.SuspendOnDestroyDefault), formatBoolTitle(lifecycle.AdoptExistingOnCreateDefault), formatBoolTitle(lifecycle.KeepOnDestroyDefault))) b.WriteString(" \n") b.WriteString(" При `terraform destroy` или удалении ресурса из манифеста:\n") b.WriteString(" - `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).\n") b.WriteString(" - `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.\n") + b.WriteString(" - `keep_on_destroy=true` — ресурс вообще не меняется в облаке, только убирается из состояния (state_only). Приоритетнее `suspend_on_destroy`.\n") b.WriteString(" \n") b.WriteString(" При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:\n") b.WriteString(" - `false` — если ресурс уже есть, будет ошибка.\n") @@ -616,6 +617,19 @@ func buildSubresourcePage(spec types.ServiceSpec, srName string, nav string, ver b.WriteString("None.\n") } + b.WriteString("\n## Поведение при destroy\n\n") + b.WriteString("Подресурс создаётся и удаляется отдельными операциями внутри родительского\n") + b.WriteString(fmt.Sprintf("инстанса `nubes_%s`. Флаги жизненного цикла:\n\n", spec.Name)) + b.WriteString("| Атрибут | По умолчанию | Поведение |\n") + b.WriteString("|---|---|---|\n") + b.WriteString("| `keep_on_destroy` | `false` | `true` — при `destroy` подресурс **не удаляется** и не меняется в облаке, только убирается из состояния (режим state_only). Нужен, когда родительский инстанс при `destroy` не удаляется (например `suspend_on_destroy = true`), и объект должен остаться внутри него — иначе следующий `apply` создаст его заново. |\n") + b.WriteString("| `skip_missing_on_delete` | `true` | `true` — если объект уже отсутствует, удаление пропускается без ошибки. |\n") + b.WriteString("| `adopt_existing_on_create` | `false` | `true` — если объект с таким именем уже есть, он усыновляется вместо ошибки. |\n") + b.WriteString("\n!!! warning \"Объект останется в облаке\"\n") + b.WriteString(" Если `keep_on_destroy = true`, а родительский инстанс удаляется **по-настоящему**\n") + b.WriteString(" (не suspend), объект исчезнет вместе с ним, а из состояния уже уйдёт — до следующего\n") + b.WriteString(" `apply` состояние и облако будут расходиться.\n") + return b.String() }