From ed4493c0ee19b3e1eb2a0eaec28a686b2848802e Mon Sep 17 00:00:00 2001 From: Repinoid Date: Thu, 24 Sep 2026 10:52:51 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E=20(=D0=BA=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F,=20destr?= =?UTF-8?q?oy-=D1=81=D0=B5=D0=BC=D0=B0=D0=BD=D1=82=D0=B8=D0=BA=D0=B0)=20+?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D1=82=D1=83=D1=81=20=D0=B2=D1=8B=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...opus_review_modify_resources_2026-09-24.md | 21 +++++++++---------- docs/curated/modifiers/org_ip_and_snat.md | 6 ++++++ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/NOTES/20_prompts/prompt_for_opus_review_modify_resources_2026-09-24.md b/NOTES/20_prompts/prompt_for_opus_review_modify_resources_2026-09-24.md index 803a484..a6f0f70 100644 --- a/NOTES/20_prompts/prompt_for_opus_review_modify_resources_2026-09-24.md +++ b/NOTES/20_prompts/prompt_for_opus_review_modify_resources_2026-09-24.md @@ -808,15 +808,14 @@ func (m jsonNormalizePlanModifier) PlanModifyString(_ context.Context, req planm (только destroy) — **задокументировать** в описании атрибута. - Раздел 3 (риски живой платформы) без прогона не закрывается — остаётся открытым. -## Требуется сделать (по итогам ревью) — ЖДЁТ КОМАНДЫ +## Требуется сделать (по итогам ревью) — ВЫПОЛНЕНО (коммиты `ba6c4f5`, `4b497e6`, `1236c59`) -1. Заменить `JsonNormalize()` на канонизирующий plan-modifier (`parse → formatVipConfigure`) — закрывает - баг порядка ключей (в т.ч. для `jsonencode`). -2. Убрать запись `null` в `Required`-атрибуты (`vip_configure`, `ip_space_name`) — хранить конфиг-значение - либо сменить на `Optional`. -3. `Delete`: ошибки API → `AddError`; warning оставить только для отсутствующего родителя. -4. `setSnat`: вместо тихой подмены — валидация пустой строки. -5. Документировать: «снять всё» через `vip_configure` нельзя, только `destroy`. -6. Поправить `TestFormatVipConfigure_Canonical` (и добавить тест на канонизацию `jsonencode`-формы - `count,name`). -7. Требуется новый релиз провайдера (2.0.19) с повторной заливкой в `nubes-dev`. +1. ✅ Заменить `JsonNormalize()` на канонизирующий plan-modifier (`parse → formatVipConfigure`) — + закрывает баг порядка ключей (в т.ч. для `jsonencode`). +2. ✅ Убрать запись `null` в `Required`-атрибуты (`vip_configure`, `ip_space_name`) — при пустом live + сохраняется текущее значение state (проверка «что отправили — то и в state»). +3. ✅ `Delete`: ошибки API → `AddError`; warning оставлен только для отсутствующего родителя. +4. ✅ `setSnat`: вместо тихой подмены — валидация пустой строки. +5. ✅ Задокументировано: «снять всё» через `vip_configure` нельзя, только `destroy`. +6. ✅ Поправлены/добавлены тесты канонизации (`jsonencode`-форма, пробелы, `[{}]`, невалидный JSON). +7. ⏳ Новый релиз провайдера (2.0.19) с повторной заливкой в `nubes-dev`. diff --git a/docs/curated/modifiers/org_ip_and_snat.md b/docs/curated/modifiers/org_ip_and_snat.md index b79cee0..b3a0155 100644 --- a/docs/curated/modifiers/org_ip_and_snat.md +++ b/docs/curated/modifiers/org_ip_and_snat.md @@ -16,6 +16,12 @@ | `vip_configure` | string (JSON), обязательный | Массив аллокаций: `[{"name":"internet-ipv4-v1","count":"3"}]`. `count` — строка | | `keep_on_destroy` | bool, по умолчанию `false` | Не снимать квоту при `destroy` | +Порядок ключей и форматирование не важны — значение канонизируется при планировании +(важно потому, что `jsonencode` сортирует ключи по алфавиту). + +Снять аллокацию через `vip_configure` **нельзя** (пустой массив отклоняется): для этого удали ресурс — +тогда отправится обратный `modify` с `count = "0"`. + ```hcl resource "nubes_vc_org_ip_allocation" "this" { org_uid = var.org_uid