docs: update debug findings 07-09

This commit is contained in:
“Naeel”
2026-07-09 00:57:18 +04:00
parent ee9759cbce
commit dd6dc2017b
@@ -1,10 +1,10 @@
# 2026-07-08 — FindInstanceByDisplayName: анализ Opus
# 2026-07-08/09 — FindInstanceByDisplayName: анализ и дебаг
## Проблема
`FindInstanceByDisplayName("NaeelOrg", 19)` возвращает nil → adopt не работает → план показывает `+ create`.
## Три кандидата (Opus)
## Три кандидата (Opus, 07-08)
### 🔴 #1: silent error swallow в GetInstanceStateRaw
`client.go:~605``GetInstanceStateRaw` может возвращать ошибку, которая проглатывается `continue`. Ни search-путь, ни fallback не логируют ошибку.
@@ -15,12 +15,44 @@
### 🟡 #3: API возвращает другое имя поля
Если API возвращает `display_name` вместо `displayName``item.DisplayName` = "", `EqualFold("", "NaeelOrg")` = false.
## Что делать (по приоритету)
## Дебаг (07-09)
1. **Добавить stderr-лог** на каждый `continue` в `FindInstanceByDisplayName`покажет точную причину.
2. **Убрать `fields`** из search-запроса (строка ~574) — проверить кандидата #2.
3. **Включить `NUBES_DEBUG_HTTP=1`** — лог doRequest.
### Ошибка #1: `req.Close = true` — не причина
Правка `req.Close` только для GET не помогла (v5.0.65). План всё ещё `+ create`.
## Доп. баг
### Ошибка #2: три сборки под одной версией 5.0.66
VM кеширует провайдер. `terraform init -upgrade` не перекачивает ту же версию. Исправлено: новый билд → новая версия.
Fallback использует `size=100`, search-путь — `pageSize=100`. Разные параметры пагинации.
### Ошибка #3: stderr не попадает в `terraform plan 2>&1`
Terraform запускает плагин как подпроцесс → stderr не ловится. Исправлено: запись в `/tmp/nubes_find_debug.log`.
### Результат дебага (v5.0.67)
Лог `/tmp/nubes_find_debug.log`:
```
[FIND-DEBUG] ModifyPlan entered, client=true
[FIND-DEBUG] PlanExistingResourceDiagnostics entered: serviceId=19 name="NaeelOrg" adopt=true client=true
[FIND-DEBUG] search returned 1 results
[FIND-DEBUG] search item uid=3f0850f2-3506-4efd-b84b-7270b5027ab5 name="NaeelOrg" svcId=19 matchSvc=true matchName=true
```
**FindInstanceByDisplayName РАБОТАЕТ** — инстанс находится, GetInstanceStateRaw проходит.
### Почему план `+ create` — это НОРМАЛЬНО
Adopt происходит на **apply**, не на plan. Plan показывает `+ create` потому что ресурса нет в `terraform.tfstate`.
На apply: `CreateResource()``FindInstanceByDisplayName` → найдёт → `adoptExistingInstanceOnCreate` → подхватит в state.
## Дальше (завтра)
1. `terraform apply` — adopt должен сработать
2. Убрать debug-логи, собрать чистую версию
3. Добавить vdc, nsxt, Штурвал
## Уроки
1. **Всегда новая версия на каждую сборку** — иначе VM не подхватывает.
2. **Писать debug в файл, не в stderr** — в плагинах Terraform stderr не виден.
3. **Не гадать** — сначала дебаг-лог, потом правка.
4. **Выполнять ТОЛЬКО по «делай»** — без разрешения ничего не трогать.