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