2.7 KiB
2.7 KiB
Баг: 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),normalizeUniversalValueV6provider/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)
Задание
Определить каноническое поведение:
- Должен ли modify слать все параметры операции (полный payload, включая необязательные с их текущими значениями), или допустимо слать только переданные?
- Где правильнее чинить: в генераторе (шаблоне modifier), в
CompactParams, или вRunInstanceOperationUniversalByCode(досылать дефолты/текущие значения незаданных полей)? - Есть ли риск, что «досылать дефолты» сломает другие модификаторы (напр. vc_org.ip_space)?
Ответ кратко, тезисно, с указанием конкретной строки/места фикса.