docs(opus): prompt по багу — modify-модификатор сбрасывает create-поля в дефолт
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
# Баг: modify-модификатор сбрасывает create-поля в дефолт (needEnableAVI true→false)
|
||||||
|
|
||||||
|
## Симптом
|
||||||
|
|
||||||
|
`nubes_vc_nsxt_network` (modifier vc_nsxt.network, modify 111) после create Edge с `needEnableAVI=true`, `virtualServicesCount=3` сбрасывает `needEnableAVI` на платформе обратно в `false`.
|
||||||
|
|
||||||
|
## Подтверждено по API (cfsParams операций)
|
||||||
|
|
||||||
|
Create Edge (op `0c169353`):
|
||||||
|
- 340 needEnableAVI = **true**
|
||||||
|
- 341 virtualServicesCount = **3**
|
||||||
|
|
||||||
|
Modify (SNAT-модификатор, op `d14a149e`):
|
||||||
|
- 368 needEnableAVI = **null**
|
||||||
|
- 369 virtualServicesCount = **null**
|
||||||
|
- 856 qosProfile = **null**
|
||||||
|
- 372 ipSpaceName = internet-ipv4-v1
|
||||||
|
- 1112 routedNetConfiguration = {...}
|
||||||
|
|
||||||
|
Итоговый state.params Edge: `needEnableAVI = false`.
|
||||||
|
|
||||||
|
## Гипотеза
|
||||||
|
|
||||||
|
Модификатор строится через `resources_core.CompactParams`, который выбрасывает пустые `Optional`-поля. Бэкенд для `modify` трактует **пропущенный/null** параметр как «сбросить в дефолт» (false/0), а не «оставить как есть». Итог: modify с частичным payload затирает create-поля.
|
||||||
|
|
||||||
|
## Файлы
|
||||||
|
|
||||||
|
- `provider/internal/core/client.go` — `RunInstanceOperationUniversalByCode` (отправка params), `normalizeUniversalValueV6`
|
||||||
|
- `provider/internal/resources_core/crud.go` — `RunOperationByCodeWithTimeout`, `CompactParams`
|
||||||
|
- генератор: `TOOLS/resource-generator/internal/templates/modifier.go`, `internal/writers/writers.go` (WriteModifierResource)
|
||||||
|
- сгенерированное: `generated/dev/go/22_vc_nsxt_network_modifier.go`
|
||||||
|
- YAML: `generated/dev/resources_yaml/22_vc_nsxt.yaml` (modify 111, поля is_modifiable)
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
Определить каноническое поведение:
|
||||||
|
1. Должен ли modify слать **все** параметры операции (полный payload, включая необязательные с их текущими значениями), или допустимо слать только переданные?
|
||||||
|
2. Где правильнее чинить: в генераторе (шаблоне modifier), в `CompactParams`, или в `RunInstanceOperationUniversalByCode` (досылать дефолты/текущие значения незаданных полей)?
|
||||||
|
3. Есть ли риск, что «досылать дефолты» сломает другие модификаторы (напр. vc_org.ip_space)?
|
||||||
|
|
||||||
|
Ответ кратко, тезисно, с указанием конкретной строки/места фикса.
|
||||||
Reference in New Issue
Block a user