Граф коммитов
100 Коммитов
Автор SHA1 Сообщение Дата
Claude a43f96883e Merge branch 'feature/downloads' into claude/production-system-image-smcxyr
# Conflicts:
#	tests/dev_server.py
#	web/app.py
#	web/static/app.css
2026-09-25 15:02:19 +00:00
Claude 0e4b1783ec Исправлены ошибки по итогам аудита: формат образов, CD-ROM, действия с машинами, firewall, VNC
- формат образа диска определяется через qemu-img info (облачные .img — это qcow2)
- ISO подключается/извлекается через virsh change-media, без угадывания устройств
- действия start/shutdown/delete сообщают об ошибке virsh; удаление UEFI-машин (--nvram)
- правила iptables/ufw для удалённых пробросов портов теперь удаляются
- VNC машин слушает только 127.0.0.1; virtuality-ctl reconfigure чинит старые машины
- зелёное уведомление не показывается, если действие вернуло ошибку
- убраны смена архитектуры машины, эмуляция ARM64 на x86 и загрузка по PXE
- tests/test_audit_fixes.py

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 15:01:32 +00:00
Claude fd7e53f8f4 Merge branch 'feature/backups' into claude/production-system-image-smcxyr
# Conflicts:
#	tests/conftest.py
#	tests/dev_server.py
#	web/app.py
#	web/templates/vm_detail.html
2026-09-25 14:56:15 +00:00
Claude 42ac092272 Merge branch 'feature/snapshots' into claude/production-system-image-smcxyr
# Conflicts:
#	web/app.py
2026-09-25 14:55:49 +00:00
Claude 2745a1280f Страница «Настройки» была добавлена: доступ, пароль, сеть машин, хранилище, время, обновления, сервер
- web/features/settings.py + settings.html: всё, что спрашивал мастер, меняется в одном месте
- перезагрузка/выключение с ожиданием возврата панели, архив настроек и отчёт для поддержки
- сообщения после редиректов показываются на любой странице (?message=, ?error=)
- virtuality-ctl set: настройки обновлений применяются без перезапуска панели
- tests/test_settings.py

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 14:55:31 +00:00
Claude 55f7d971f6 Первая загрузка образа переписана: панель ставится первой, прогресс виден в мастере
- virtuality_firstboot.sh: шаги panel → network → virtualization → tools → finish,
  прогресс в config/setup.json (в т.ч. имена пакетов apt), идемпотентный повтор
  после ошибки, /etc/issue с адресом панели
- install_web_panel.sh: поэтапная замена web/ с сохранением web.prev, офлайн
  virtualenv с pip из wheel, юниты/TLS/firewall через virtuality-ctl reconfigure,
  мастер настройки и для ручной установки
- virtuality-ctl url; путь к исходникам хранится в web.env
- build-iso.sh: wheel pip в образе, часовой пояс по GeoIP
- Cockpit, консольный dashboard, тестовая VM, clean_install, setup_bridge_br0,
  bootstrap.sh и setup_github_sync.sh были убраны (заменены мастером и virtuality-ctl)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 14:50:16 +00:00
Claude 4fd04be588 Скачивание образов по ссылке и из каталога готовых систем было добавлено
- web/features/downloads.py: фоновая операция типа «download» — urllib по 1 МиБ,
  таймаут 30 с, User-Agent Virtuality/<версия>, запись в .<имя>.part и переименование
  в конце; в сообщении скорость и остаток («245 МБ из 3,1 ГБ · 12 МБ/с · осталось 4 мин»);
  отмена между кусками (POST /api/operations/{id}/cancel и /downloads/{id}/cancel);
  проверка схемы, имени файла, занятости имени и свободного места (Content-Length + 512 МиБ);
  для каталога — проверка контрольной суммы (SHA256SUMS/SHA512SUMS/одиночный хеш),
  при несовпадении файл удаляется; после ISO — virsh pool-refresh virtuality-iso,
  после .img.xz — распаковка и запуск конвертации в qcow2 как при загрузке с компьютера.
- /iso и /disk-images: карточка «Скачать по ссылке», на /disk-images — «Каталог готовых
  систем» для процессора сервера с пометками «Рекомендуем», «Загружен», «Скачивается»;
  идущие скачивания вверху страниц с живым прогрессом (опрос раз в 2 с) и «Отменить».
- Тесты: парсер контрольных сумм, проверка ссылок и имён, загрузка с локального
  http-сервера, редирект, отмена, несовпадение суммы, нехватка места, .img.xz, маршруты.
- В ветку скопированы web/core.py, web/catalog.py, presenters.format_bytes и tests/fixtures
  из общей рабочей копии (без изменений), conftest подменяет run_cmd и каталоги и в core.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 14:49:43 +00:00
Claude 8a4474a305 Мастер первичной настройки и nodectl: добавлены пошаговый /setup, управление узлом через virtuality-ctl и тесты
- web/nodectl.py: факты об узле (сеть, диски, часовые пояса, KVM) и действия через virtuality-ctl
- web/features/setup.py + шаблоны setup*: мастер из 8 шагов (установка, часовой пояс, пароль, HTTPS, сеть, хранилище, обновления, итог)
- безопасное переключение на мост br0 с авто-откатом и подтверждением из браузера
- virtuality-ctl storage-use: перенос данных на отдельный диск
- панель перенаправляет на мастер до его завершения; демо-режим VIRTUALITY_DEV_SETUP
- tests/test_setup.py: 8 тестов на маршруты мастера

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 14:36:32 +00:00
Claude 2450278d93 Резервные копии машин были добавлены: создание, восстановление, удаление
Первый модуль-фича на общем 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
2026-09-25 14:32:05 +00:00
Claude 4198c18ff4 Снимки машин (точки восстановления) были добавлены
Новая страница /vm/{name}/snapshots и вкладка «Снимки» на странице машины:
список внутренних снимков libvirt с описанием, датой, состоянием и меткой
«Текущий», создание снимка с автоматическим именем snap-ГГГГММДД-ЧЧММ,
возврат к снимку и удаление. Создание и возврат идут как фоновые задачи
с журналом; страница сама обновляется, когда задача завершится.

Ограничения и ошибки объясняются по-русски: не больше 8 снимков на машину,
только диски qcow2, предупреждение для машин с UEFI; известные ошибки libvirt
переводятся, а исходный текст показывается рядом. Возврат повторяется
с --force, если libvirt этого требует.

Модуль web/features/snapshots.py, парсеры с тестами на образцах вывода virsh,
fake_run_cmd в тестах расширен командами snapshot-*, demo-сервер показывает
снимки и идущую задачу. В спрайт добавлены иконки camera и history.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 14:30:25 +00:00
Claude 4098c270a4 Интерфейс панели был полностью перерисован
Новый дизайн в стиле коммерческих продуктов, рассчитанный на обычного
пользователя:
- светлая и тёмная темы (следует системной), шрифт 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
2026-09-25 07:01:41 +00:00
Claude c4cebd916b Центр обновлений больше не предлагает откат на старую версию
Раньше обновление считалось доступным при любом расхождении локального
коммита и origin/main. Нода со сборкой новее main (например, из
ISO-образа ветки) получала предложение «обновиться» на старую версию,
а ночное автообновление откатывало её само. Теперь обновление
предлагается и ставится, только если локальный коммит — предок
удалённого.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LEUXMcdZo7b87mjkUsPgg
2026-09-25 07:01:30 +00:00
Виктор c8c3385142 Блоки информации VM были заменены на графические карточки 2026-05-07 21:19:06 +09:00
Виктор be79d9ca33 Четыре основных блока VM были выстроены в один ряд 2026-05-07 21:14:18 +09:00
Виктор 2e30c6584f Блок управления VM был перенесён рядом с ресурсами 2026-05-07 21:06:39 +09:00
Виктор a536f16d6c Страница входа была подключена к темам панели 2026-05-07 21:03:03 +09:00
Виктор 8c8628b982 Неиспользуемый шаблон базы знаний был удалён 2026-05-07 21:02:34 +09:00
Виктор bd40d5e4c3 Форма создания VM была очищена от несовместимых состояний 2026-05-07 20:59:13 +09:00
Виктор 5034ae8e83 Меню панели было пересобрано заново 2026-05-07 20:48:26 +09:00
Виктор 2d52aea170 Защита загрузки образов дисков от случайного перехода была добавлена 2026-05-07 20:42:08 +09:00
Виктор cb775209e0 Защита загрузки ISO от случайного перехода была добавлена 2026-05-07 20:41:28 +09:00
Виктор 9761193870 Меню карточки VM было подключено к общему шаблону 2026-05-07 20:13:15 +09:00
Виктор 1cce303132 Меню создания VM было подключено к общему шаблону 2026-05-07 20:12:22 +09:00
Виктор e534171cd7 Главное меню дашборда было подключено к общему шаблону 2026-05-07 20:11:16 +09:00
Виктор ee81502f6d Ссылка базы знаний была направлена на статическую страницу 2026-05-07 20:03:27 +09:00
Виктор 2c58421d10 Пункт базы знаний был добавлен в меню 2026-05-07 20:01:55 +09:00
Виктор 2af543c5fe Была добавлена страница базы знаний 2026-05-07 20:01:41 +09:00
Виктор e89cac63b2 Поле ручного IP VM было добавлено в страницу сети 2026-05-07 10:48:58 +09:00
Виктор 4779b74464 Страница сети была переведена на единое меню 2026-05-07 10:25:04 +09:00
Виктор ab9d51611a Страница дисков была переведена на единое меню 2026-05-07 10:19:56 +09:00
Виктор 6a6fd7bb83 Страница ISO была переведена на единое меню 2026-05-07 10:19:13 +09:00
Виктор ec933815d8 Страница хоста была переведена на единое меню 2026-05-07 10:18:39 +09:00
Виктор d8c48d191c Страница операций была переведена на единое меню 2026-05-07 10:18:20 +09:00
Виктор e7ecc361a8 Общее левое меню было пересобрано 2026-05-07 10:17:28 +09:00
Виктор d44a4a2b67 Блоки ресурсов ISO и порядка загрузки были возвращены в карточку VM 2026-05-07 10:08:32 +09:00
Виктор 94e43feba3 Карточка VM была переведена в общий каркас панели 2026-05-07 09:58:29 +09:00
Виктор ba1640b966 Unknown в autostart карточки VM был заменён на disabled 2026-05-07 09:54:19 +09:00
Виктор e923d4558a Страница создания VM была возвращена в общий каркас панели 2026-05-07 09:47:21 +09:00
Виктор 7efb55fe92 Страница обновлений была возвращена в общий каркас панели 2026-05-07 09:46:30 +09:00
Виктор 86c1ee145c Update Center был переведён на ручную проверку и кнопку установки 2026-05-07 09:38:42 +09:00
Виктор 42ddcba0b4 Telegram Notifier был убран из страницы журналов 2026-05-07 09:38:12 +09:00
Виктор a5ce4af516 Дашборд был очищен и перестроен 2026-05-07 09:36:20 +09:00
Виктор 7fbb6e27c7 Кнопка автозапуска в карточке VM стала индикатором состояния 2026-05-07 09:22:08 +09:00
Виктор 9e17ae50f6 Статус автозапуска на дашборде был сделан кликабельным 2026-05-07 09:21:40 +09:00
Виктор 4af3626d17 Карточка VM получила нормальный статус автозапуска 2026-05-07 09:13:06 +09:00
Виктор 9d90cd9874 Статус автозапуска VM был добавлен на дашборд 2026-05-07 09:12:39 +09:00
Виктор e968691b81 Карточка VM была переведена на компактные действия 2026-05-07 08:59:13 +09:00
Виктор d0152da73b Компактные действия VM были добавлены на дашборд 2026-05-07 08:58:55 +09:00
Виктор f7859a7aa7 Динамический прогресс операции создания VM был добавлен 2026-05-07 07:04:21 +09:00
Виктор 1623fbdbb7 Чекбокс замены диска был перенесён в блок готового образа 2026-05-07 06:32:30 +09:00