docs(plans): ревью Opus по плану — §9 (ответы на 5 вопросов, count строкой, обязательный follow-up по генератору)
This commit is contained in:
@@ -33,8 +33,8 @@ nubes_k8s_shturval_cluster
|
||||
| Атрибуты | `org_uid` — String, Required; `vip_configure` — String (JSON `[{"name":..,"count":..}]`), Required, нормализация JSON как в `resources_core/json_planmodifier.go`; `keep_on_destroy` — Bool, Optional, default `false` |
|
||||
| ID | `org_uid` (один ресурс на оргу; массив целиком) |
|
||||
| Create/Update | `modify` на инстансе орги: `vIPConfigure` = JSON-массив целиком (replace-семантика). Путь: `core.RunInstanceOperationUniversalByCode` (или обёртка `resources_core`), под `LockInstance(org_uid)` |
|
||||
| Read | `core.GetInstanceStateParams(org_uid)` → ключ `vIPConfigure`; пустое/`[{}]`/`count=0` → нормализовать; родитель 404/deleted → `RemoveResource` (`resources_core.ShouldRemoveFromState`) |
|
||||
| Delete | `keep_on_destroy=true` → no-op + Warning. Иначе: родитель жив → modify с `count=0` по каждому элементу (форма **проверена** тестом 09-22) + Warning; родитель мёртв → no-op + Warning |
|
||||
| Read | `core.GetInstanceStateParams(org_uid)` → ключ `vIPConfigure`; пустое/`[{}]`/`count=0` → нормализовать; родитель 404/deleted → `RemoveResource` (`resources_core.ShouldRemoveFromState`). **Нужен нормализующий planmodifier** (аналог JSON-модификатора), иначе вечный дрейф при плановом 3→0 (ревью Opus, п.3) |
|
||||
| Delete | `keep_on_destroy=true` → no-op + Warning. Иначе: родитель жив → modify с `count="0"` по каждому элементу (**строкой**, как в HAR; форма проверена тестом 09-22) + Warning; родитель мёртв → no-op + Warning. Массив `[]` НЕ отправлять — не проверен (ревью Opus, п.2) |
|
||||
| Import | passthrough по `org_uid` |
|
||||
|
||||
## 4. Ресурс 2 — `nubes_vc_nsxt_snat`
|
||||
@@ -80,6 +80,10 @@ nubes_vc_nsxt → nubes_vc_org_ip_allocation → nubes_vc_nsxt_snat → k8
|
||||
|
||||
**Не реализуем в этом этапе** — ждём решения пользователя (правка генератора задевает все сервисы).
|
||||
|
||||
> ⚠️ По ревью Opus (2026-09-24) пункт **§7б — обязательное условие**, а не опциональное:
|
||||
> без исключения modify-only из create-read-back при переходном варианте будет борьба за поле
|
||||
> между instance-ресурсом и модификатором. Пункт остаётся обязательным follow-up.
|
||||
|
||||
## 8. Вопросы для ревью Opus
|
||||
|
||||
1. Верно ли, что `RunInstanceOperationUniversalByCode` дозаполняет незаданные параметры из **live `state.params`**
|
||||
@@ -92,3 +96,31 @@ nubes_vc_nsxt → nubes_vc_org_ip_allocation → nubes_vc_nsxt_snat → k8
|
||||
когда значение выставил модификатор, а instance-ресурс его только читает?
|
||||
5. Достаточно ли `depends_on` (SNAT → org-IP) для корректного destroy, если org-IP-модификатор должен
|
||||
уничтожиться **до** эджа? Нужны ли дополнительные рёбра?
|
||||
|
||||
---
|
||||
|
||||
## 9. Ревью Opus (2026-09-24, отдельный чат)
|
||||
|
||||
**Вердикт фактуры:** оба документа (план и `HAR_FRESH_CREATE_2026-09-24.md`) проверены по коду — факты верны,
|
||||
ссылки на пути точны.
|
||||
|
||||
**Ответы на вопросы §8:**
|
||||
|
||||
1. **Подтверждено кодом.** `operation_run_bycode.go:108-142` дозаполняет все незаданные параметры по приоритету
|
||||
**live `state.params` → `paramValue` формы → `defaultValue`**; если ничего нет — параметр пропускается.
|
||||
SNAT-ресурс может шлать только 372, pre-read+merge НЕ нужен.
|
||||
2. Слать `[{name, count:"0"}]`. `[]` не проверен, риск пустого payload/reset.
|
||||
3. `count="0"`, `[{}]`, пустой массив — одно состояние «пусто» при Read. Иначе `[{}]` после create даёт ложный
|
||||
дрейф; и для случая 3→0 нужен нормализующий planmodifier.
|
||||
4. **Дрейф возможен** в переходном варианте (борьба за поле с read-back instance-ресурса) → §7б обязателен.
|
||||
5. `depends_on` достаточно: TF развернёт граф, SNAT уничтожится до org-IP. Доп. рёбер не нужно при условии,
|
||||
что оба модификатора зависят от `nubes_vc_nsxt`, а кластер — от SNAT.
|
||||
|
||||
**Замечания кодеру:**
|
||||
- Два новых ресурса **не закрывают** инцидент `inconsistent result` на `nubes_vc_org` (Required-поле остаётся):
|
||||
§7 — обязательный follow-up, не «потом».
|
||||
- `count` в payload — **строка** `"0"` (в HAR всегда строка); зафиксировать тип явно.
|
||||
- Стенд: орга **`saas`**, иначе коллизия `WZ03709-iaas`.
|
||||
|
||||
**Фиксатор:** эпоха `kind: modifier` отменена — ветку не переиспользовать; новые ресурсы hand-written
|
||||
в `resources_core`, без реестра модификаторов.
|
||||
|
||||
Reference in New Issue
Block a user