Files
ayurishchevandClaude Opus 5.5 ae826fc562 Состояния колонки «Upgrade ROS» и осознанный откат ROS до версии канала
После смены канала на long-term колонка показывала «актуально», хотя
версия канала (7.23.7) старше установленной (7.24.4) — docs/changes/023:
- состояния колонки: «↑ X», «актуально», «канал: X» (версия канала старше
  установленной), «проверка не удалась» (ошибка check-for-updates больше
  не маскируется под «актуально»), «—»;
- откат ROS до версии канала как отдельная задача ros_downgrade: проверка
  версии на устройстве → обязательный бэкап (сбой прерывает) → install;
- UI: «Откатить ROS…» в меню устройства и групповой пункт в «Обновление»,
  окно с вводом целевой версии, список не затрагиваемых устройств;
- API: POST /devices/{id}/update/downgrade и /batch/ros_downgrade с
  обязательным target_version. Штатное обновление откат не выполняет.

Тесты: 33 из 33. Стенд: 422 без версии, задачи отката на недоступном
устройстве завершаются на проверке без бэкапа. Реальный откат и ручная
проверка UI пользователем на момент коммита не выполнены.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 17:28:01 +03:00

4.7 KiB
Raw Permalink Blame 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 пользователем на момент коммита не подтверждена.