From a1b6ac8f23b8630b8d3f8bf90489ac408fae684f Mon Sep 17 00:00:00 2001 From: Repinoid Date: Tue, 22 Sep 2026 13:54:00 +0300 Subject: [PATCH] =?UTF-8?q?docs(har):=20=D1=80=D0=B0=D0=B7=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=20SNAT/ipSpace=20=D0=BC=D0=BE=D0=B4=D0=B8=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=D1=86=D0=B8=D0=B9=20=E2=80=94=20payload-=D0=B8,=20?= =?UTF-8?q?no-needed,=20reverse=20SNAT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/HAR_SNAT_MODIFY_FINDINGS.md | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 docs/HAR_SNAT_MODIFY_FINDINGS.md diff --git a/docs/HAR_SNAT_MODIFY_FINDINGS.md b/docs/HAR_SNAT_MODIFY_FINDINGS.md new file mode 100644 index 0000000..8776203 --- /dev/null +++ b/docs/HAR_SNAT_MODIFY_FINDINGS.md @@ -0,0 +1,49 @@ +# HAR-разбор: SNAT / ipSpace / модификации (dev) + +Дата: 2026-09-22. Источник: `/home/naeel/TF/tf_provider/HAR/*.har` (записи UI на dev-стенде, 2026-09-20). +Релевантные файлы: `edge_.har` (SNAT/Edge), `ipSpace0.har`, `org_enough_.har`, `org_not_enough_.har`, `org0.har`. + +## Поток modify в реальном API + +1. `POST /api/v1/svc/instanceOperations` — `{"instanceUid":"...","operation":"modify"}` → возвращает `instanceOperationUid`. +2. `POST /api/v1/svc/instanceOperationCfsParams` — по одному запросу на параметр: + `{"paramValue":"...","instanceOperationUid":"...","svcOperationCfsParamId":NNN}`. +3. `GET /svc/instanceOperations/{id}/validate-cfs` +4. `POST /svc/instanceOperations/{id}/run` +5. Поллинг `GET /svc/instanceOperations/{id}`. + +## Найденные payload-и + +| Операция | param id | код | значение из HAR | +|---|---|---|---| +| edge modify | 368 | `needEnableAVI` | `false` / `true` | +| edge modify | 369 | `virtualServicesCount` | `1` / `2` | +| edge modify | 856 | `qosProfile` | `QoS-100Mbit` | +| edge modify | **372** | **`ipSpaceName`** | **`no-needed`** / `""` | +| edge modify | 1112 | `routedNetConfiguration` | `{"mainDns":"81.22.46.22","secondDns":"185.247.187.77","ipAddrPool":"10.10.102.0/24"}` | +| org modify | **662** | **`vIPConfigure`** | `[{"name":"internet-ipv4-v1","count":"3"}]` | + +## Ответы на открытые вопросы + +1. **Тумблера «Выделить VIP для SNAT» в API НЕТ.** SNAT управляется целиком через `ipSpaceName` (param 372). + Его `valueList` (из метаданных в HAR): `no-needed, internet-antiddos-v1, internet-no-antiddos-v1, ...` — то есть `no-needed` это легальное значение «SNAT не нужен». + - Включить SNAT: `ipSpaceName = <имя ipSpace из org>`. + - Выключить: `ipSpaceName = "no-needed"`. +2. 🔴 **Reverse для SNAT подтверждён:** обратный payload = тот же `modify` с `ipSpaceName="no-needed"` (UI реально так отправлял). Значит delete SNAT-модификатора можно реализовать не как no-op. +3. ❌ **Де-аллокация IP в org (reverse) в HAR НЕ записана** — есть только добавление. Payload удаления/уменьшения не подтверждён. + +## Побочные факты + +- У `ipSpaceName` (372) в API есть `valueList`, но в нашем YAML его **нет** → проверить, тянет ли генератор `valueList` (возможно, он динамический: имена ipSpace конкретной org). +- Имя ipSpace в живом примере — `internet-ipv4-v1` (не произвольное). +- `qosProfile` (856) UI всегда шлёт как `QoS-100Mbit`. +- `routedNetConfiguration` передаётся JSON-строкой. +- В состоянии org: `"vip":{"no-needed":{},"internet-ipv4-v1":{"count":4}}` — `no-needed` фигурирует и в стейте. + +## Что ещё нужно выяснить из UI (открытые вопросы) + +1. 🔴 **Де-аллокация IP в org:** записать HAR при удалении ipSpace / уменьшении count → какой payload (count=0? опустить элемент? отдельная операция?). +2. 🔴 **`no-needed` vs `""`:** в HAR оба варианта для выключенного SNAT. Какой канонический для «выключено»? +3. 🟡 **`valueList` у ipSpaceName:** динамический (текущие ipSpace org) или фиксированный? Проверить до/после добавления ipSpace. +4. 🟡 **Имя ipSpace:** свободный ввод или выбор из списка? Есть ли ограничения/уникальность? +5. 🟡 **Полное удаление ipSpace** (не уменьшение count) и что UI делает при destroy Edge с включённым SNAT.