Files
ayurishchevandClaude Sonnet 5 4c1841b61b ros_control: централизованное управление парком MikroTik RouterOS
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>
2026-09-19 13:13:29 +03:00

1.7 KiB
Raw Permalink Blame History

План: 003 — скачивание бэкапов через REST, загрузка в S3 сервером

Контекст

Схема 001 (устройство само грузит в S3 по presigned PUT через /tool/fetch) не работает: на ROS 7.24 fetch поддерживает upload только по FTP/SFTP. Решение пользователя: Control Server сам скачивает файлы с устройства через REST-канал и сам загружает их в S3. Устройство S3 не касается.

Проверено на устройстве (RB4011, ROS 7.24.4)

  • GET /rest/file/<id> для файлов >4 КБ не отдаёт contents (231 КБ .backup, 75 КБ .rsc).
  • POST /rest/file/read {file, offset, chunk-size} возвращает блок data — подходит для .rsc.
  • POST /rest/execute {script, as-string} с :convert to=base64 возвращает блок бинарного файла без искажений в JSON.

Шаги

  1. ros/operations.py: download_file() — чтение блоками (32 КБ) через execute + base64 в файл, проверка итогового размера; убрать upload_file() (fetch).
  2. s3.py: upload_file() (PutObject, boto3 в потоке); убрать presigned PUT.
  3. services/ops.py::run_backup: создать файлы → скачать во временный каталог → загрузить в S3 → удалить файлы с устройства (в т.ч. при сбое); временный каталог всегда удаляется.
  4. Тест бэкапа, README, summary; проверка на msk-home.