После смены канала на 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>
4.7 KiB
4.7 KiB
Итоги: 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 пользователем на момент коммита не подтверждена.