docs(plan): финализировать план + запрос на ревью Опуса

This commit is contained in:
Repinoid
2026-09-22 20:52:15 +03:00
parent fba4cbda37
commit e06a2c0b11
2 changed files with 70 additions and 50 deletions
+31 -50
View File
@@ -131,53 +131,35 @@ idle-гейт (`waitForInstanceIdle`) уже стоит выше — не тро
---
## Шаг 8. YAML-разметка в `generated/dev/resources_yaml/`
## Шаг 8. YAML-разметка (источник-канон) в `TOOLS/yaml-generator`
`19_vc_org.yaml` (modify 207, modifier ip_space):
```yaml
- name: modify
id: 207
kind: modifier
modifier: ip_space
delete_strategy: error
idempotency: check_before_run
Источник-канон — реестр исключений `serviceSpecificModifiers` в
`TOOLS/yaml-generator/main.go` (Ключ — имя сервиса → имя modifier).
`generated/dev` перегенерируется — туда НЕ вносить вручную.
Контракт в `lib.OperationSpec` (алиас в обоих генераторах), значит yaml-generator
должен проставлять флаги при маршале. Расширить реестр со `map[string]string`
до структуры, несущей: `ModifierName`, `DeleteStrategy`, `Idempotency`,
`DeleteParams []struct{Code,Value}`:
```go
type modifierException struct {
ModifierName string
DeleteStrategy string // noop_warn | inverse | error
Idempotency string // none | check_before_run
DeleteParams []deleteParam // только для inverse
}
type deleteParam struct { Code, Value string }
var serviceSpecificModifiers = map[string]modifierException{
"vc_org": {ModifierName: "ip_space", DeleteStrategy: "error", Idempotency: "check_before_run"},
"vc_nsxt": {ModifierName: "network", DeleteStrategy: "inverse",
DeleteParams: []deleteParam{{"needEnableAVI", "false"}}},
}
```
`22_vc_nsxt.yaml` (modify 111, modifier network):
```yaml
- name: modify
id: 111
kind: modifier
modifier: network
delete_strategy: inverse
delete_params:
- code: needEnableAVI
value: "false"
```
ВАЖНО: `generated/dev` — gitignored/генерируемый. Канон YAML — в yaml-generator
(источник из API), поэтому разметку `delete_strategy`/`idempotency` надо вносить в
**источник** (механизм исключений yaml-generator, а не в generated), иначе перегенерация
её сотрёт. Уточнить: где живёт источник правил модификаторов (registry исключений).
---
## Шаг 9. Тесты
`provider/internal/core/` — unit:
- `modifierDesiredEqualsCurrent`: совпадение/расхождение по bool/int/map-fixed/array-map-fixed;
- досылка: live→default→skip (integer>0 без дефолта не шлёт `"0"`).
`TOOLS/resource-generator` — unit:
- `ValidateSpec`: неизвестный enum, inverse без delete_params, delete_params.code вне params.
---
## Шаг 10. Сборка и заливка
- `go build ./...` + `go vet ./...` по всем 5 модулям;
- подать сборку `TOOLS/scripts/03_build_and_upload_provider.sh --profile TOOLS/config/dev`
(bump версии отдельным коммитом).
В цикле над ops (там, где `Kind="modifier"`): проставить `op.DeleteStrategy`,
`op.Idempotency`, `op.DeleteParams`.
---
@@ -188,15 +170,14 @@ idle-гейт (`waitForInstanceIdle`) уже стоит выше — не тро
3. `refactor(gen): шаблон modifier — reconcile, без CompactParams, ID identity, Delete стратегия`
4. `refactor(core): вынести JSON-эквивалентность в jsonutil`
5. `feat(core): modifierDesiredEqualsCurrent + флаг idempotent`
6. `feat(yaml): разметка ip_space/network`
6. `feat(yaml): реестр исключений модификаторов (delete_strategy/idempotency)`
7. `test(core,gen): unit-кейсы`
8. `chore(dev): bump версии`
---
## Открытый вопрос (блокирует шаг 8)
## Открытый вопрос — закрыт
**Где живёт источник-канон YAML модификаторов** (не `generated/dev`)? Разметку
`delete_strategy`/`idempotency` надо вносить в источник, а не в сгенерированный файл,
иначе перегенерация (`01_generate_yamls.sh`) сотрёт. Нужно найти механизм
(yaml-generator exceptions / registry), где держать эти флаги.
Источник-канон — реестр `serviceSpecificModifiers` в `TOOLS/yaml-generator/main.go`.
Разметка `delete_strategy`/`idempotency` расширяет этот реестр, а НЕ правится вручную
в `generated/dev`.