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>
17 lines
1.7 KiB
Markdown
17 lines
1.7 KiB
Markdown
# План: 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`.
|