From 8b1176f8d88f8601555090e90ec686474ba3b444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 9 Jul 2026 09:20:26 +0400 Subject: [PATCH] fix: skip empty optional ref-params in resolveRefSvcParamValues, bump 5.0.68 --- .../2026-07-08_find_instance_by_display_name_bug.md | 8 ++++++++ TEST_STAND/kuber/main.tf | 2 +- TOOLS/config/test/profile.env | 2 +- provider/internal/core/client.go | 3 +++ provider/main.go | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/HISTORY/SONNET/2026-07-08_find_instance_by_display_name_bug.md b/HISTORY/SONNET/2026-07-08_find_instance_by_display_name_bug.md index c5a75f6..c96c2c4 100644 --- a/HISTORY/SONNET/2026-07-08_find_instance_by_display_name_bug.md +++ b/HISTORY/SONNET/2026-07-08_find_instance_by_display_name_bug.md @@ -56,3 +56,11 @@ Adopt происходит на **apply**, не на plan. Plan показыва 2. **Писать debug в файл, не в stderr** — в плагинах Terraform stderr не виден. 3. **Не гадать** — сначала дебаг-лог, потом правка. 4. **Выполнять ТОЛЬКО по «делай»** — без разрешения ничего не трогать. + +## 2026-07-09: фикс resolveRefSvcParamValues — пустые опциональные ref-параметры + +### Баг +`resolveRefSvcParamValues()` в `client.go:1169` не проверяет пустые значения. Когда юзер не задаёт опциональный ref-параметр (например `vdcGroupUid`), `FormatString` возвращает `""`, функция пытается резолвить `""` как имя → `findInstanceUidByDisplayNameRefSvc(ctx, 29, "")` → uid="" → ошибка "не найден экземпляр". + +### Фикс (v5.0.68) +Добавлена проверка `strings.TrimSpace(value) == ""` перед вызовом `findInstanceUidByDisplayNameRefSvc`. Пустые опциональные ref-параметры пропускаются без ошибки. Универсально для всех сервисов. diff --git a/TEST_STAND/kuber/main.tf b/TEST_STAND/kuber/main.tf index 34c844d..bf8107a 100644 --- a/TEST_STAND/kuber/main.tf +++ b/TEST_STAND/kuber/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { nubes = { source = "terra.k8c.ru/nubes-test/nubes" - version = "5.0.67" + version = "5.0.68" } } } diff --git a/TOOLS/config/test/profile.env b/TOOLS/config/test/profile.env index 1eb1f1d..dd98f9d 100644 --- a/TOOLS/config/test/profile.env +++ b/TOOLS/config/test/profile.env @@ -3,7 +3,7 @@ NUBES_API_ENDPOINT="https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" TOKEN_FILE="secrets/test.token" # Version -VERSION="5.0.67" +VERSION="5.0.68" # Docs generation — ONLY from docs_gen// (never from docs/) DOCS_GEN_DIR="provider/docs_gen/test" diff --git a/provider/internal/core/client.go b/provider/internal/core/client.go index bba7e66..9cab347 100644 --- a/provider/internal/core/client.go +++ b/provider/internal/core/client.go @@ -1167,6 +1167,9 @@ func (c *UniversalClient) resolveRefSvcParamValues(ctx context.Context, opParams // но сам всегда возвращает нижний регистр. Регистр пользователя будет // восстановлен в state после RefreshResourceState (generated resource). newValue = strings.ToLower(value) + } else if strings.TrimSpace(value) == "" { + // Опциональный ref-параметр не задан — оставляем пустым + newValue = "" } else if !isUUIDLike(value) { uid, err := c.findInstanceUidByDisplayNameRefSvc(ctx, refSvcId, value) if err != nil { diff --git a/provider/main.go b/provider/main.go index ee5746d..c612601 100644 --- a/provider/main.go +++ b/provider/main.go @@ -17,7 +17,7 @@ import ( ) var ( - version string = "5.0.67" + version string = "5.0.68" ) func main() {