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() }