feat(lib): delete_strategy/idempotency/delete_params в OperationSpec (+DeleteParam)

This commit is contained in:
Repinoid
2026-09-22 21:03:11 +03:00
parent 2933c57a4b
commit 6e297cc649
2 changed files with 19 additions and 4 deletions
+3 -3
View File
@@ -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`;
+16 -1
View File
@@ -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 — параметр операции.