feat(yaml): реестр исключений модификаторов (delete_strategy/idempotency/delete_params)
This commit is contained in:
@@ -17,10 +17,12 @@ import (
|
|||||||
"yaml-generator/internal/normalize"
|
"yaml-generator/internal/normalize"
|
||||||
"yaml-generator/internal/spec"
|
"yaml-generator/internal/spec"
|
||||||
"yaml-generator/internal/types"
|
"yaml-generator/internal/types"
|
||||||
|
|
||||||
|
"tf-tools/lib"
|
||||||
)
|
)
|
||||||
|
|
||||||
// serviceSpecificModifiers — реестр исключений (ДАННЫЕ, не логика).
|
// serviceSpecificModifiers — реестр исключений (ДАННЫЕ, не логика).
|
||||||
// Ключ — стабильное имя сервиса (как в YAML), значение — имя modifier-ресурса,
|
// Ключ — стабильное имя сервиса (как в YAML), значение — конфиг modifier-ресурса,
|
||||||
// который генерируется для его операции modify (отложенный modify над инстансом).
|
// который генерируется для его операции modify (отложенный modify над инстансом).
|
||||||
//
|
//
|
||||||
// ЧТО: операция modify сервиса помечается kind=modifier + modifier=<имя>.
|
// ЧТО: операция modify сервиса помечается kind=modifier + modifier=<имя>.
|
||||||
@@ -29,11 +31,29 @@ import (
|
|||||||
// выполнять в том же ресурсе инстанса (чередующаяся зависимость).
|
// выполнять в том же ресурсе инстанса (чередующаяся зависимость).
|
||||||
// ГДЕ: TOOLS/ARCHITECTURE.md, раздел «Реестр исключений».
|
// ГДЕ: TOOLS/ARCHITECTURE.md, раздел «Реестр исключений».
|
||||||
//
|
//
|
||||||
|
// DeleteStrategy / Idempotency — поведение модификатора (см. PLAN_modifier_redesign.md).
|
||||||
|
// DeleteParams — обратные значения (wire-строки) только для DeleteStrategy==inverse.
|
||||||
|
//
|
||||||
// Добавлять только здесь. Grep-гейт TOOLS/scripts/check_hardcoded_service_ids.sh
|
// Добавлять только здесь. Grep-гейт TOOLS/scripts/check_hardcoded_service_ids.sh
|
||||||
// запрещает сравнения svc.ID == N вне этого файла.
|
// запрещает сравнения svc.ID == N вне этого файла.
|
||||||
var serviceSpecificModifiers = map[string]string{
|
type modifierException struct {
|
||||||
"vc_org": "ip_space",
|
ModifierName string
|
||||||
"vc_nsxt": "network",
|
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() {
|
func main() {
|
||||||
@@ -92,9 +112,12 @@ func main() {
|
|||||||
if !strings.EqualFold(ops[idx].Action, "modify") {
|
if !strings.EqualFold(ops[idx].Action, "modify") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if modName, ok := serviceSpecificModifiers[name]; ok {
|
if modCfg, ok := serviceSpecificModifiers[name]; ok {
|
||||||
ops[idx].Kind = "modifier"
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user