feat(lib): delete_strategy/idempotency/delete_params в OperationSpec (+DeleteParam)
This commit is contained in:
@@ -209,9 +209,9 @@ var serviceSpecificModifiers = map[string]modifierException{
|
|||||||
|
|
||||||
## Решения, нуждающиеся в подтверждении (из ревью)
|
## Решения, нуждающиеся в подтверждении (из ревью)
|
||||||
|
|
||||||
1. **ID=identity → миграция state.** Смена формата заставит Terraform replace уже
|
1. **ID=identity → РЕШЕНО: формат ID НЕ меняем** (оставить `uid:operation:modifier`).
|
||||||
задеплоенных модификаторов. Предлагаю: НЕ менять формат ID (оставить
|
Смена формата форснёт replace у задеплоенных модификаторов и вызовет баг E.
|
||||||
`uid:operation:modifier`), а idempotency обеспечить pre-check, не трогая ID.
|
Идемпотентность — через pre-check, не через ID. Шаг 4.3 отменён (ID остаётся как есть).
|
||||||
2. **`error` + replace.** Пользователь не сможет заменить error-модификатор.
|
2. **`error` + replace.** Пользователь не сможет заменить error-модификатор.
|
||||||
Предлагаю: оставить `error` только для «чистого» destroy, документировать запрет replace.
|
Предлагаю: оставить `error` только для «чистого» destroy, документировать запрет replace.
|
||||||
3. **Разметка по default** — `ip_space`: `delete_strategy=error`, `idempotency=check_before_run`;
|
3. **Разметка по default** — `ip_space`: `delete_strategy=error`, `idempotency=check_before_run`;
|
||||||
|
|||||||
@@ -44,9 +44,24 @@ type OperationSpec struct {
|
|||||||
Modifier string `yaml:"modifier,omitempty"`
|
Modifier string `yaml:"modifier,omitempty"`
|
||||||
Subresource string `yaml:"subresource,omitempty"`
|
Subresource string `yaml:"subresource,omitempty"`
|
||||||
Man string `yaml:"man,omitempty"`
|
Man string `yaml:"man,omitempty"`
|
||||||
|
// 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"`
|
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 — параметр операции.
|
// ParamSpec — параметр операции.
|
||||||
// Поля с тегом yaml — канонический контракт.
|
// Поля с тегом yaml — канонический контракт.
|
||||||
// Поля без тега — специфичны для конкретного генератора (заполняются при обработке).
|
// Поля без тега — специфичны для конкретного генератора (заполняются при обработке).
|
||||||
|
|||||||
Reference in New Issue
Block a user