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`.
|
`FindInstanceByDisplayName("NaeelOrg", 19)` возвращает nil → adopt не работает → план показывает `+ create`.
|
||||||
|
|
||||||
## Три кандидата (Opus)
|
## Три кандидата (Opus, 07-08)
|
||||||
|
|
||||||
### 🔴 #1: silent error swallow в GetInstanceStateRaw
|
### 🔴 #1: silent error swallow в GetInstanceStateRaw
|
||||||
`client.go:~605` — `GetInstanceStateRaw` может возвращать ошибку, которая проглатывается `continue`. Ни search-путь, ни fallback не логируют ошибку.
|
`client.go:~605` — `GetInstanceStateRaw` может возвращать ошибку, которая проглатывается `continue`. Ни search-путь, ни fallback не логируют ошибку.
|
||||||
@@ -15,12 +15,44 @@
|
|||||||
### 🟡 #3: API возвращает другое имя поля
|
### 🟡 #3: API возвращает другое имя поля
|
||||||
Если API возвращает `display_name` вместо `displayName` — `item.DisplayName` = "", `EqualFold("", "NaeelOrg")` = false.
|
Если API возвращает `display_name` вместо `displayName` — `item.DisplayName` = "", `EqualFold("", "NaeelOrg")` = false.
|
||||||
|
|
||||||
## Что делать (по приоритету)
|
## Дебаг (07-09)
|
||||||
|
|
||||||
1. **Добавить stderr-лог** на каждый `continue` в `FindInstanceByDisplayName` — покажет точную причину.
|
### Ошибка #1: `req.Close = true` — не причина
|
||||||
2. **Убрать `fields`** из search-запроса (строка ~574) — проверить кандидата #2.
|
Правка `req.Close` только для GET не помогла (v5.0.65). План всё ещё `+ create`.
|
||||||
3. **Включить `NUBES_DEBUG_HTTP=1`** — лог doRequest.
|
|
||||||
|
|
||||||
## Доп. баг
|
### Ошибка #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