Files
ros_control/docs/changes/023-ros-downgrade/summary.md
T

35 lines
4.7 KiB
Markdown
Raw Normal View History

# Итоги: 023 — состояния колонки «Upgrade ROS» и осознанный откат ROS до версии канала
## Разбор исходной жалобы
После смены канала колонка показывала «актуально». Цепочка обновления статуса корректна (`check-for-updates` в REST синхронный — проверено
на реальном устройстве). Причина — отображение: версии каналов MikroTik — stable 7.24.4, testing 7.24.4 (совпадает — «актуально» верно),
long-term 7.23.7 (старше установленной 7.24.4 — RouterOS пишет `New version is available`, а приложение по строгому сравнению показывало «актуально»).
Попутно: при ошибке `check-for-updates` и сохранённой старой `latest-version` тоже показывалось «актуально».
## Сделано
- `devices.ros_state(st)`: `unknown` / `check_error` / `update` / `downgrade` / `current`. Колонка «Upgrade ROS»: «↑ X», «актуально»,
нейтральная «канал: X» (версия канала старше установленной), предупреждение «проверка не удалась» (ошибка в подсказке), «—».
Фильтр «Обновления» и штатное обновление не изменились.
- `ros.check_downgrade` (версия канала = подтверждённой и старше установленной), `ros.downgrade_ros`; общая часть с `install_ros_update`
вынесена (`_check_update`, `_install` — обрыв соединения при перезагрузке штатен).
- Задача `ros_downgrade` (`ops.run_ros_downgrade`, параметр `target_version`): проверка → **обязательный бэкап** (сбой прерывает) →
повторная проверка и install; сообщение содержит ключи бэкапа, бэкап привязан к той же задаче.
- API: `POST /api/v1/devices/{id}/update/downgrade`, `POST /api/v1/batch/ros_downgrade` (обязательный `target_version`, 202);
маршрут зарегистрирован до `/batch/{action}`, в общий `Literal` откат не добавлен.
- UI: пункт «Откатить ROS…» в меню «⋯» (только в состоянии `downgrade`), «Откатить ROS до версии канала…» в меню «Обновление»;
окно `_dialog_downgrade.html`: что будет откатано, «Не будут затронуты» с причинами, предупреждения, ввод целевой версии
(кнопка неактивна до ввода), при несовпадении — ошибка в окне без задач. Подпись задачи «Откат ROS».
## Проверено
- `pytest`: 33 из 33 (новые: состояния, порядок «бэкап → install» и отсутствие install при несовпадении/сбое бэкапа, API, окно UI).
- Стенд (8001), временное недоступное устройство: без `target_version` → 422; оба эндпоинта → 202; задачи `ros_downgrade` → `failed`
на проверке, **бэкап не создавался**. Временное устройство удалено.
- Реальные устройства (все на stable 7.24.4): «актуально», пунктов отката нет — верно.
- Боевые данные: группы, устройства, бэкапы совпадают по ID; добавлено 3 задачи и 12 событий проверки
(одна — лишний `ros_update` на временном недоступном устройстве, ошибочно запущенный оркестратором; на данные не повлиял).
## Оговорки
- **Реальный откат не выполнялся**: поведение RouterOS 7 `update/install` при версии канала старше установленной (скачать и откатить)
подтверждено статусом устройства (`New version is available`), но не прогоном — проверяет пользователь.
- Прошивка RouterBOARD после отката ROS остаётся новее — отдельно не обрабатывается.
- Ручная проверка UI пользователем на момент коммита не подтверждена.