Document entire failure chain: 13 versions, 9 bugs
This commit is contained in:
@@ -0,0 +1,81 @@
|
|||||||
|
# 2026-07-24 — Полная хронология провалов (v1.0.6 — v1.0.25)
|
||||||
|
|
||||||
|
## v1.0.6 — Трёхколоночный UI, auto-selectService
|
||||||
|
- **Что:** три колонки, сервисы грузятся, auto-select на dummy
|
||||||
|
- **Результат:** «Сервисы: Загрузка...» висит
|
||||||
|
- **Причина:** заменён ВЕСЬ шаблон вместо добавления. auto-selectService вызывал API до готовности страницы.
|
||||||
|
|
||||||
|
## v1.0.7 — HttpClient.post не существовал
|
||||||
|
- **Ошибка:** `'HttpClient' object has no attribute 'post'`
|
||||||
|
- **Причина:** в http_client.py только get(), а api_test.py использовал post()
|
||||||
|
- **Исправление:** добавлен post()
|
||||||
|
|
||||||
|
## v1.0.8 — r.json() на пустом ответе
|
||||||
|
- **Ошибка:** `'str' object has no attribute 'get'`
|
||||||
|
- **Причина:** POST /instances → 201 с пустым телом. r.json() падает.
|
||||||
|
- **Исправление:** try/except, возвращаем {}
|
||||||
|
|
||||||
|
## v1.0.9 — instanceUid из Location
|
||||||
|
- **Ошибка:** не находился UUID инстанса
|
||||||
|
- **Причина:** POST /instances возвращает UID в заголовке Location, не в теле
|
||||||
|
- **Исправление:** парсинг Location → UUID
|
||||||
|
|
||||||
|
## v1.0.10 — cfsParams в POST /instances
|
||||||
|
- **Ошибка:** 400 Bad Request
|
||||||
|
- **Причина:** cfsParams нельзя в POST /instances
|
||||||
|
- **Исправление:** убраны cfsParams из create
|
||||||
|
|
||||||
|
## v1.0.11 — descr обязателен
|
||||||
|
- **Ошибка:** 400 Bad Request
|
||||||
|
- **Причина:** поле descr нужно в POST /instances
|
||||||
|
- **Исправление:** добавлен descr: "autotest"
|
||||||
|
|
||||||
|
## v1.0.12 — тело ошибки в ответе
|
||||||
|
- **Добавлено:** показ тела ответа API при ошибке
|
||||||
|
|
||||||
|
## v1.0.13 — displayName не уникален
|
||||||
|
- **Ошибка:** 400 "Instance Display Name not unique"
|
||||||
|
- **Причина:** имя autotest-1 уже занято
|
||||||
|
- **Исправление:** timestamp в имени
|
||||||
|
|
||||||
|
## v1.0.14 — displayName редактируемый
|
||||||
|
- **Добавлено:** поле ввода displayName в параметрах
|
||||||
|
|
||||||
|
## v1.0.15-1.0.16 — авто-selectService + сломанный шаблон
|
||||||
|
- **Ошибка:** «Сервисы: Загрузка...»
|
||||||
|
- **Причина:** заменён рабочий шаблон новым с багами
|
||||||
|
- **Исправление:** откат к v1.0.12
|
||||||
|
|
||||||
|
## v1.0.17-1.0.19 — восстановление + displayName
|
||||||
|
- Восстановлен рабочий шаблон, добавлен только displayName
|
||||||
|
|
||||||
|
## v1.0.20 — traceback в ошибках
|
||||||
|
- **Добавлено:** traceback для отладки
|
||||||
|
|
||||||
|
## v1.0.21 — r.json() возвращает строку "201"
|
||||||
|
- **Ошибка:** `'str' object does not support item assignment`
|
||||||
|
- **Причина:** POST /instances → тело "201" → r.json() = "201" → result = "201" (строка)
|
||||||
|
- **Исправление:** isinstance(parsed, dict)
|
||||||
|
|
||||||
|
## v1.0.22 — двухшаговый create (без cfsParams)
|
||||||
|
- **Ошибка:** инстанс создан, но статус "not created"
|
||||||
|
- **Причина:** только POST /instances, операция create не запущена
|
||||||
|
- **Исправление:** добавлен POST /instanceOperations
|
||||||
|
|
||||||
|
## v1.0.23 — cfsParams в POST /instanceOperations
|
||||||
|
- **Ошибка:** 422 "required CFS parameter failInProgress (200) is missing"
|
||||||
|
- **Причина:** cfsParams нельзя в POST /instanceOperations — они отдельно
|
||||||
|
- **Исправление:** убраны cfsParams из вызова, добавлены через /params
|
||||||
|
|
||||||
|
## v1.0.24 — /params без instanceOperationUid
|
||||||
|
- **Ошибка:** /params ожидает {instanceOperationUid, svcOperationCfsParamId, paramValue}
|
||||||
|
- **Причина:** поле instanceOperationUid пропущено
|
||||||
|
- **Исправление:** добавлено
|
||||||
|
|
||||||
|
## v1.0.25 — пропущен /validate
|
||||||
|
- **Ошибка:** операция не запускается
|
||||||
|
- **Причина:** в Go-клиенте есть шаг validate перед run
|
||||||
|
- **Исправление:** добавлен POST /validate
|
||||||
|
|
||||||
|
## Итого: 13 итераций, 9 багов
|
||||||
|
Каждый раз — новый баг, потому что не сверял с Go-клиентом посимвольно.
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
# 2026-07-24 — Финальный поток создания инстанса
|
||||||
|
|
||||||
|
## Поток API (1:1 с Go-клиентом Terraform)
|
||||||
|
|
||||||
|
### Шаг 1: Создать инстанс
|
||||||
|
```
|
||||||
|
POST /instances
|
||||||
|
{"serviceId": 1, "displayName": "autotest-1-xxx", "descr": "autotest"}
|
||||||
|
→ 201, Location: /instances/{instanceUid}
|
||||||
|
→ извлечь instanceUid из Location
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 2: Создать операцию
|
||||||
|
```
|
||||||
|
POST /instanceOperations
|
||||||
|
{"instanceUid": "...", "operation": "create"}
|
||||||
|
→ 201, Location: /instanceOperations/{opUid}
|
||||||
|
→ извлечь opUid из Location
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 3: Задать параметры (по одному)
|
||||||
|
```
|
||||||
|
POST /instanceOperations/{opUid}/params
|
||||||
|
{"instanceOperationUid": "{opUid}", "svcOperationCfsParamId": 200, "paramValue": "false"}
|
||||||
|
```
|
||||||
|
Повторить для каждого cfsParam (12 штук для dummy).
|
||||||
|
|
||||||
|
### Шаг 4: Валидация
|
||||||
|
```
|
||||||
|
POST /instanceOperations/{opUid}/validate
|
||||||
|
(пустое тело)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 5: Запуск
|
||||||
|
```
|
||||||
|
POST /instanceOperations/{opUid}/run
|
||||||
|
(пустое тело)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Шаг 6: Поллинг
|
||||||
|
```
|
||||||
|
GET /instances?pageSize=200&page=1
|
||||||
|
→ искать instanceUid → ждать !operationIsInProgress && status не "creating"
|
||||||
|
→ если не нашли — page++
|
||||||
|
```
|
||||||
|
|
||||||
|
## Баг 8: `/params` без instanceOperationUid (v1.0.24-1.0.25)
|
||||||
|
- **Пропущенное поле:** `instanceOperationUid` в POST /params
|
||||||
|
- **Пропущенный шаг:** `/validate` перед `/run`
|
||||||
|
- **Исправление:** добавлены `instanceOperationUid` + `/validate`
|
||||||
|
|
||||||
|
## Баг 9: пропущен `/run` (v1.0.20-1.0.22)
|
||||||
|
- Операция создавалась но не запускалась
|
||||||
|
- Исправлено: POST /instanceOperations/{opUid}/run
|
||||||
|
|
||||||
|
## Итого: 5 шагов API + поллинг
|
||||||
|
Идентично Go-клиенту `CreateGenericInstanceUniversalV6`.
|
||||||
Reference in New Issue
Block a user