Control Server (FastAPI) с WEB UI (Jinja2 + HTMX) и JSON API для группового администрирования устройств RouterOS 7 через REST. - Устройства: список, статус (модель, канал, версии ROS/FW, uptime, доступные обновления), примечания, пароли шифруются (Fernet); фоновый опрос каждые 30 с и быстрое обнаружение недоступности (таймаут соединения 4 с). - Группы устройств и фильтры (устройства, резервные копии). - Резервные копии: .backup и .rsc (show-sensitive) создаются через REST, скачиваются сервером и загружаются в S3 (Yandex Object Storage). - Обновление ROS/FW и выбор канала, групповые операции задачами. - Интерфейс по утверждённому макету: светлая/тёмная темы, окна, шрифты IBM Plex локально. Docker Compose, SQLite в томе, минимальный набор тестов. - Планы и итоги каждого изменения — в docs/changes/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
Итоги: 001 — первая версия ros_control
Сделано
- Control Server на FastAPI: JSON API
/api/v1(Bearer-токен) и WEB UI (Jinja2 + HTMX, вход по логину/паролю). - Local Metadata DB (SQLite): устройства с зашифрованными (Fernet) паролями, кэш статуса, бэкапы, задачи.
- RouterOS REST-клиент: статус (модель, канал, ROS, FW, uptime), бэкап, смена канала, обновление ROS и FW.
- Бэкап:
.backup(без шифрования) +.rsc→ устройство само загружает в S3 по presigned PUT → файлы удаляются с устройства. - S3 (Yandex Object Storage): список, скачивание (presigned GET), удаление.
- Долгие и групповые операции через таблицу
jobsс ограничением параллелизма (MAX_CONCURRENCY). - Docker Compose,
venvдля разработки, README, 4 автотеста.
Проверено
pytest: 4 теста (шифрование, разбор статуса, порядок шагов бэкапа с моками RouterOS/S3, авторизация API и отсутствие пароля в ответах) — пройдены.- Дымовой прогон сервера: редирект на логин, вход, добавление недоступного устройства (offline + причина), задача бэкапа завершается
failedс понятной ошибкой, страница бэкапов открывается.
НЕ проверено (нужно устройство и бакет)
- Реальная работа с RouterOS 7 и Yandex Object Storage. Главный риск —
/tool/fetchсhttp-method=put upload=yesна целевой версии ROS. - Обновления ROS/FW (поведение при обрыве соединения на перезагрузке реализовано по документации).
- Сборка и запуск Docker-образа не выполнялись.
Отклонения от плана
- Администратор UI берётся из переменных окружения (
ADMIN_USER/ADMIN_PASSWORD), таблицыusersнет — достаточно для одного администратора. - Кнопки в строке устройства и групповые кнопки используют
hx-includeвместо общей формы (иначе значения каналов разных устройств смешивались).
Ограничения
- Только RouterOS 7.x. Один администратор. HTMX-скрипт лежит локально (
app/ui/static), внешние CDN не нужны. - Долгие задачи выполняются внутри процесса сервера; при перезапуске незавершённые помечаются
failed.