6.4 KiB
HAR fresh-create: что происходит при создании орги/эджа (dev, 2026-09-24)
Источники:
HAR/globak.har(ЛК: создание орги + vDC + эджа, затем два modify),HAR/org_already exists.har(отказ создания орги из-за коллизии имени). Стенд:lk-api-gateway-dev.ngcloud.ru, realmsandbox.nubes.ru. Цель разбора: понять, что реально приходит вstate.paramsпослеcreate(влияет на read-back в сгенерированных ресурсах).
1. Поток создания в ЛК
Инстанс создаётся в два шага, не одним запросом:
POST /instances— тело только{"serviceId":N,"displayName":"…","descr":""}. Никаких параметров.POST /instanceOperations—{"instanceUid":"…","operation":"create"}→ возвращаетinstanceOperationUid.POST /instanceOperationCfsParams— по одному запросу на параметр:{"paramValue":"…","instanceOperationUid":"…","svcOperationCfsParamId":NNN}.GET /instanceOperations/{opUid}/validate-cfs.POST /instanceOperations/{opUid}/run.- Поллинг
GET /instanceOperations/{opUid}доdtFinish.
Это в точности тот же набор эндпоинтов, что использует наш провайдер (core/operation_run.go, operation_cfs.go).
2. Параметры операций (из HAR)
| Сервис | Операция | Параметры |
|---|---|---|
| Орга (19) | create | 418 resourceRealm=sandbox.nubes.ru, 556 organizationType, 1125 orgSuffix |
| vDC (21) | create | 30, 746, 335, 397, 557, 558, 361 (+ 8 = uid орги) |
| Эдж / vc_nsxt (22) | create | 621 vdcType=vdc, 8 vdcUid, 622, 340 needEnableAVI, 341 virtualServicesCount, 825 qosProfile, 1110 routedNetConfiguration |
| Орга (19) | modify (207) | 662 vIPConfigure = [{"name":"internet-ipv4-v1","count":"3"}] |
| Эдж (22) | modify (111) | 368 needEnableAVI, 369 virtualServicesCount=4, 856 qosProfile, 372 ipSpaceName=internet-ipv4-v1, 1112 routedNetConfiguration |
372 ipSpaceName не участвует в create — только в modify. Ровно как в нашем Update
(22_vc_nsxt_resource.go), который шлёт 368/369/372/856/1112.
3. state.params до и после modify
Ответ GET /instances/{uid}: параметры лежат в instance.state.params
(instance.params = null). Наш GetInstanceStateParams (core/instance_params.go:35-45)
читает именно этот путь — то есть read-back их видит.
| Инстанс | Сразу после create | После modify |
|---|---|---|
Орга df5ec5f2… («kontra») |
{"admins":[], "vIPConfigure":[{}], "resourceRealm":"sandbox.nubes.ru", "organizationType":"saas"} |
vIPConfigure=[{"name":"internet-ipv4-v1","count":"3"}], state version 3 → 4 |
Эдж ad0ab577… («tedj») |
vdcUid, vdcType, qosProfile="QoS-100Mbit", vdcGroupUid="", needEnableAVI=true, virtualServicesCount="1", routedNetConfiguration — ключа ipSpaceName НЕТ |
ipSpaceName="internet-ipv4-v1", virtualServicesCount="4", version 1 → 2 |
Ключевое: у орги vIPConfigure присутствует и равен [{}] (пустой элемент);
у эджа ipSpaceName отсутствует до первого modify.
4. Провал операции приходит внутри тела, а не HTTP-кодом
HAR/org_already exists.har: создание орги с organizationType=iaas и orgSuffix=suff:
POST /instances→ 201,POST /instanceOperations→ 201,validate-cfs→ 204,run→ 201;- финальный
GET /instanceOperations/{opUid}:submitResult="201",isSuccessful=false,errorLog="Организация с именем 'WZ03709-iaas' уже существует в рамках ресурсной платформы sandbox.nubes.ru".
Вывод: ошибку операции нужно читать из errorLog/isSuccessful поллинга; HTTP-код ничего не скажет.
Дополнительно: имя орги формируется как <suffix>-<тип> (WZ03709-iaas / WZ03709-saas),
то есть в одном realm — по одной орге каждого типа; повтор даёт ту же ошибку.
5. Выводы для нашего провайдера
nubes_vc_org.v_ip_configure— Required в схеме (generator мержит create+modify,loader.go:96), но приCreateне отправляется, а read-back после create вернёт[{}]вместо планового значения → рискProvider produced inconsistent result after applyна создании орги. Прогоном не проверено.nubes_vc_nsxt.ip_space_name— Optional+Computed: при create ключа в state нет, значение сохраняется в state, но SNAT не включается; включается только следующимapply(Update → 372). Прогоном не проверено.RefreshResourceState(resources_core/state_refresh.go) перезаписывает поля изstate.params; для modify-only параметров это поведение опасное — в create его включать не следует (универсальная правка генератора).- Из п.1–2 следует, что одной правкой «добавить два ресурса-модификатора» инцидент может не закрыться:
схема
nubes_vc_orgостанется с Required-полем.
6. Ограничения разбора
apply/planне запускались: пункты 1–2 — вывод из кода + HAR, не подтверждены живым прогоном.- Проверено на одном стенде (dev), одной орге (
NarodOrg— во втором HAR имяWZ03709-iaasуже занято). qosProfileв create ЛК отправляет пустым, после modify в state =QoS-100Mbit.