**Language / Язык:** [English](../troubleshooting.md) | [Русский](troubleshooting.md) # Устранение неполадок ## Ready остаётся недоступным 1. Проверьте Postgres: `make logs` / health в Compose. 2. Выполните `make db-migrate`. 3. Снова вызовите `/health/ready`. Task workers могут повторять попытки, пока миграции не догонят после позднего migrate. ## Неожиданный HTTP 501 У каждого зарегистрированного маршрута должен быть реальный обработчик или DB-backed стаб — 501 не должен появляться для известного пути. Если вы его видите: - Убедитесь, что вызываете точный зарегистрированный path/verb (проверьте `app/vsphere/rest/coverage.py` или `/docs`). - 501 от опционального legacy-стаба (`ENABLE_PVE_STUB=true`) ожидается для необъявленных методов в стиле PVE, когда `CONTRACT_FALLBACK=error`; это не относится к native vSphere-поверхности. - Сообщите о регрессии — на native vSphere-плоскости ожидается полное покрытие реестра. ## 401 / 403 - Сессия истекла (скользящий TTL 2 часа) или заголовок/cookie `vmware-api-session-id` не отправлен. - Некорректный Basic auth на `/api/session` (отсутствует заголовок, неверный base64 от `user:password`). - Отказ по правам — попробуйте сравнить `administrator@vsphere.local` и `readonly@vsphere.local` (см. [Авторизация](domains/authz.md)). ## Задача никогда не завершается - Изучите `/api/cis/tasks/{task}`. - Проверьте логи worker/симулятора (`make logs`). - Убедитесь, что `TASK_WORKER_CONCURRENCY` > 0 и аренды в базе данных можно забрать (claim). - Очень высокий `SIMULATION_TIME_SCALE` даёт необычные замедления (больше = быстрее симуляция); чаще виноваты неверно заданные worker-аренды. ## Сбои TLS / gateway - Используйте порт хоста **443** (gateway) для TLS-клиентов — pyvmomi, govmomi, провайдер Terraform `hashicorp/vsphere`, Pulumi. - Устанавливайте `verify_ssl=False` / `allow_unverified_ssl=true` **только** для локального self-signed development-сертификата. - Внутри Compose обращайтесь напрямую к `simulator:8080` (обычный HTTP, без gateway). - Seeded-имена ВМ для `small` — `web-01`, `web-02`, `db-01`, `app-01`, `jumpbox`, а не Proxmox-style `pve01`/VMID. ## Drift Terraform / Pulumi / Ansible после reseed Reseed заменяет инвентарь в PostgreSQL (MOID-ы и имена ВМ могут измениться); состояние внешних инструментов автоматически не обновляется. Выполните refresh, import или пересоберите стеки после `make seed`. ## Hot-swap «ничего не сделал» - Просмотр каталога ≠ apply. Используйте **Apply as runtime** или `POST /ui/api/contract/apply?major=N`. - Применение мажора меняет **каталог Web UI / представление evidence**, а не живую таблицу маршрутов — runtime всегда обслуживает полную зарегистрированную поверхность. См. [Версии API](api-versions.md). - Apply локален для процесса; перезапуск Compose возвращает к значению по умолчанию (мажор 9). ## Demo unload удивил `POST /ui/api/demo/unload` очищает состояние, созданное через API, и загружает `small`. Повторите `make seed` (или снова загрузите `demo-cluster`), чтобы восстановить более богатую фикстуру.