diff --git a/TOOLS/yaml-generator/main.go b/TOOLS/yaml-generator/main.go index 2c83e05..303e8e7 100644 --- a/TOOLS/yaml-generator/main.go +++ b/TOOLS/yaml-generator/main.go @@ -17,10 +17,12 @@ import ( "yaml-generator/internal/normalize" "yaml-generator/internal/spec" "yaml-generator/internal/types" + + "tf-tools/lib" ) // serviceSpecificModifiers — реестр исключений (ДАННЫЕ, не логика). -// Ключ — стабильное имя сервиса (как в YAML), значение — имя modifier-ресурса, +// Ключ — стабильное имя сервиса (как в YAML), значение — конфиг modifier-ресурса, // который генерируется для его операции modify (отложенный modify над инстансом). // // ЧТО: операция modify сервиса помечается kind=modifier + modifier=<имя>. @@ -29,11 +31,29 @@ import ( // выполнять в том же ресурсе инстанса (чередующаяся зависимость). // ГДЕ: TOOLS/ARCHITECTURE.md, раздел «Реестр исключений». // +// DeleteStrategy / Idempotency — поведение модификатора (см. PLAN_modifier_redesign.md). +// DeleteParams — обратные значения (wire-строки) только для DeleteStrategy==inverse. +// // Добавлять только здесь. Grep-гейт TOOLS/scripts/check_hardcoded_service_ids.sh // запрещает сравнения svc.ID == N вне этого файла. -var serviceSpecificModifiers = map[string]string{ - "vc_org": "ip_space", - "vc_nsxt": "network", +type modifierException struct { + ModifierName string + DeleteStrategy string // noop_warn | inverse | error + Idempotency string // none | check_before_run + DeleteParams []lib.DeleteParam +} + +var serviceSpecificModifiers = map[string]modifierException{ + "vc_org": { + ModifierName: "ip_space", + DeleteStrategy: "error", + Idempotency: "check_before_run", + }, + "vc_nsxt": { + ModifierName: "network", + DeleteStrategy: "inverse", + DeleteParams: []lib.DeleteParam{{Code: "needEnableAVI", Value: "false"}}, + }, } func main() { @@ -92,9 +112,12 @@ func main() { if !strings.EqualFold(ops[idx].Action, "modify") { continue } - if modName, ok := serviceSpecificModifiers[name]; ok { + if modCfg, ok := serviceSpecificModifiers[name]; ok { ops[idx].Kind = "modifier" - ops[idx].Modifier = modName + ops[idx].Modifier = modCfg.ModifierName + ops[idx].DeleteStrategy = modCfg.DeleteStrategy + ops[idx].Idempotency = modCfg.Idempotency + ops[idx].DeleteParams = modCfg.DeleteParams } }