docs: update debug findings 07-09
This commit is contained in:
@@ -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. **Выполнять ТОЛЬКО по «делай»** — без разрешения ничего не трогать.
|
||||
|
||||
Reference in New Issue
Block a user