Первый модуль-фича на общем core.py — web/features/backups.py,
подключён в app.py одной строкой include_router.
- копия = папка /var/lib/virtuality/backups/<машина>/<ГГГГММДД-ЧЧММ>/
с vm.xml (virsh dumpxml --migratable), <диск>.qcow2 на каждый диск
и meta.json (машина, дата, диски, размер, версия, заметка);
- создание — фоновая операция: свободное место проверяется заранее по
qemu-img info, работающая машина мягко выключается (ждём до 3 минут,
без принудительного выключения), диски копируются qemu-img convert -c
с прогрессом из строк «(NN.NN/100%)», после чего машина запускается;
- восстановление — операция: диски распаковываются в images/<имя>[-<диск>]
.qcow2, в XML меняется имя, убираются uuid, MAC и nvram, затем
virsh define; восстановление под занятым именем требует галочку
«заменить существующую» — старая машина удаляется с дисками, а ISO
перед этим извлекается из привода, чтобы --remove-all-storage его не
стёр;
- страницы: «Резервные копии» в меню (все копии по машинам, занятое и
свободное место), вкладка «Резервные копии» на странице машины с
формой «Создать копию» и заметкой, страница восстановления с
понятным списком шагов;
- create_backup(vm, note, wait=True) можно вызывать без HTTP —
задел под расписание (python3 web/features/backups.py web01 «заметка»);
- tests/conftest.py: каталог backups, патчи core.*, вывод virsh
domblklist --details, dumpxml --migratable и qemu-img info из fixtures;
tests/test_backups.py — 33 теста парсеров, воркеров и маршрутов;
tests/dev_server.py показывает демо-копии.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
- web/core.py: настройки, авторизация, run_cmd, хранилище фоновых операций
и шаблоны вынесены в общий модуль, чтобы новые функции жили в отдельных
модулях; app.py пока не переключён;
- web/catalog.py: официальные облачные образы Ubuntu 26.04/24.04,
Debian 13, Alpine 3.23 (amd64/arm64) и типы ОС для установки с ISO;
- tests/fixtures: реалистичный вывод virsh для тестов будущих парсеров;
- presenters.format_bytes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
Новый дизайн в стиле коммерческих продуктов, рассчитанный на обычного
пользователя:
- светлая и тёмная темы (следует системной), шрифт Inter и иконки
Lucide вшиты в панель — работает без интернета;
- общий каркас base.html и компоненты _ui.html вместо 14 независимых
страниц; адаптивная вёрстка для телефона;
- простой язык: «Работает / Выключена», «Автозапуск», «Доступ из
интернета» вместо running, autostart, DNAT; технические данные
убраны во вкладку «Для специалистов»;
- главная: загрузка процессора, памяти и хранилища, карточки машин с
главным действием и меню остальных, приветственный сценарий для
первой машины;
- мастер создания машины из трёх шагов с готовыми конфигурациями;
- страница машины с вкладками, переключателем автозапуска и порядком
загрузки кнопками;
- «Сеть и доступ»: открытие SSH, сайта, RDP и т. д. из списка,
ручные IP машин, понятная диагностика;
- загрузка образов перетаскиванием с прогрессом и оставшимся временем;
- подтверждения опасных действий в диалоге и уведомления;
- раздел «Помощь»;
- web/presenters.py переводит вывод virsh и /proc в данные для
страниц; tests/dev_server.py запускает панель с имитацией virsh.
Также: исправлено определение модели CPU на x86 («207» вместо
названия процессора), история версии 0.10.0 и документация обновлены
под Ubuntu 26.04 LTS, в README добавлены скриншоты.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
- tests/: 55 тестов web-панели, авторизации, сети и обновлений,
все страницы рендерятся на замоканных virsh/systemctl;
- GitHub Actions: pyflakes + pytest на Python 3.11–3.13, shellcheck,
сборка ISO amd64/arm64 по тегу v* или вручную;
- Makefile: make check / make test / make iso;
- docs/IMAGE.md и README: установка с ISO, продакшен-настройки,
разработка;
- updates/versions.json: описание версии 0.10.0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg