From 6e297cc6496b478449a71f2360de039e345772ff Mon Sep 17 00:00:00 2001 From: Repinoid Date: Tue, 22 Sep 2026 21:03:11 +0300 Subject: [PATCH] =?UTF-8?q?feat(lib):=20delete=5Fstrategy/idempotency/dele?= =?UTF-8?q?te=5Fparams=20=D0=B2=20OperationSpec=20(+DeleteParam)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PLAN_modifier_redesign.md | 6 +++--- TOOLS/lib/types.go | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/PLAN_modifier_redesign.md b/PLAN_modifier_redesign.md index 66794d3..2692a1e 100644 --- a/PLAN_modifier_redesign.md +++ b/PLAN_modifier_redesign.md @@ -209,9 +209,9 @@ var serviceSpecificModifiers = map[string]modifierException{ ## Решения, нуждающиеся в подтверждении (из ревью) -1. **ID=identity → миграция state.** Смена формата заставит Terraform replace уже - задеплоенных модификаторов. Предлагаю: НЕ менять формат ID (оставить - `uid:operation:modifier`), а idempotency обеспечить pre-check, не трогая ID. +1. **ID=identity → РЕШЕНО: формат ID НЕ меняем** (оставить `uid:operation:modifier`). + Смена формата форснёт replace у задеплоенных модификаторов и вызовет баг E. + Идемпотентность — через pre-check, не через ID. Шаг 4.3 отменён (ID остаётся как есть). 2. **`error` + replace.** Пользователь не сможет заменить error-модификатор. Предлагаю: оставить `error` только для «чистого» destroy, документировать запрет replace. 3. **Разметка по default** — `ip_space`: `delete_strategy=error`, `idempotency=check_before_run`; diff --git a/TOOLS/lib/types.go b/TOOLS/lib/types.go index 09c536f..4766fe2 100644 --- a/TOOLS/lib/types.go +++ b/TOOLS/lib/types.go @@ -44,7 +44,22 @@ type OperationSpec struct { Modifier string `yaml:"modifier,omitempty"` Subresource string `yaml:"subresource,omitempty"` Man string `yaml:"man,omitempty"` - Params []ParamSpec `yaml:"params"` + // DeleteStrategy — стратегия Delete для modifier-операций: noop_warn | inverse | error. + // Пусто → noop_warn (remove из state + AddWarning). + DeleteStrategy string `yaml:"delete_strategy,omitempty"` + // Idempotency — pre-check перед run для modifier: none | check_before_run. + // Пусто → none. + Idempotency string `yaml:"idempotency,omitempty"` + // DeleteParams — обратные значения (wire-строки) только при delete_strategy: inverse. + DeleteParams []DeleteParam `yaml:"delete_params,omitempty"` + Params []ParamSpec `yaml:"params"` +} + +// DeleteParam — обратное значение параметра для inverse-Delete. +// Value — финальная wire-строка (для bool "false", для json готовый JSON). +type DeleteParam struct { + Code string `yaml:"code"` + Value string `yaml:"value"` } // ParamSpec — параметр операции.