From 52941670ad1e71ef9dbd1bf317257ec826bc6ba9 Mon Sep 17 00:00:00 2001 From: catborise Date: Tue, 3 Nov 2026 11:39:05 +0300 Subject: [PATCH] docs(readme): the README says what is true now, without the old notes Behavior changes held one note per past fix; it keeps what an update changes for operators and users. Migration is a section of bullets. Docker cannot keep options that exist only in settings.py (LDAP, OTP_ENABLED, LOGIN_TRUSTED_PROXIES): the README shows how to mount one. The OpenLDAP examples use OpenLDAP names, the variables table has ADMIN_USERNAME and ADMIN_PASSWORD, Contents lists every section, and features name backups and the languages. Removed: screenshots of the 2020 interface, the Gitpod badge and its TODO-only config, and doc/readme.md, which held one word. --- .gitpod.yml | 5 -- README.md | 152 +++++++++++++++++--------------------- doc/images/grouped.PNG | Bin 32516 -> 0 bytes doc/images/hosts.PNG | Bin 22928 -> 0 bytes doc/images/instance.PNG | Bin 20868 -> 0 bytes doc/images/log.PNG | Bin 29162 -> 0 bytes doc/images/nongrouped.PNG | Bin 24696 -> 0 bytes doc/images/readme.md | 1 - doc/readme.md | 1 - 9 files changed, 67 insertions(+), 92 deletions(-) delete mode 100644 .gitpod.yml delete mode 100644 doc/images/grouped.PNG delete mode 100644 doc/images/hosts.PNG delete mode 100644 doc/images/instance.PNG delete mode 100644 doc/images/log.PNG delete mode 100644 doc/images/nongrouped.PNG delete mode 100644 doc/images/readme.md delete mode 100644 doc/readme.md diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 024baab1..00000000 --- a/.gitpod.yml +++ /dev/null @@ -1,5 +0,0 @@ -image: gitpod/workspace-full - -tasks: - - init: 'echo "TODO: Replace with init/build command"' - command: 'echo "TODO: Replace with command to start project"' diff --git a/README.md b/README.md index 8d40dbfd..e17cebbf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/retspen/webvirtcloud) - # WebVirtCloud ###### Python >=3.10 & Django 5.2 LTS (tested on Python 3.10 – 3.13) @@ -34,7 +32,7 @@ WebVirtCloud and `virt-manager`/`virsh` can manage the same libvirt host **concu ## Features * QEMU/KVM hypervisor management (multiple compute nodes), with each host's capacity and what its VMs were given -* Virtual machine lifecycle: create, delete, power management, clone (also of a running VM), migrate (with or without shared storage), disk moves between pools +* Virtual machine lifecycle: create, delete, power management, clone (also of a running VM, with libvirt 11.10 or later), migrate (with or without shared storage), disk moves between pools * Long operations (create, clone, snapshots, migration, ISO upload) run as jobs that the page follows and can cancel * External snapshots (memory optional, guest file systems frozen through the agent) * **External change detection:** VMs created, deleted or renamed via `virt-manager` or `virsh` are reconciled into the database automatically @@ -52,15 +50,17 @@ WebVirtCloud and `virt-manager`/`virsh` can manage the same libvirt host **concu * Cloud-init datasource interface (OpenStack metadata compatible) and NoCloud seed media * REST API — OpenAPI 3.0 (Swagger & ReDoc), with API tokens * LDAP / Active Directory integration (optional) +* Daily backups of the panel, with an optional off-site copy (restic over SFTP) +* English, Turkish and Simplified Chinese ## Contents 1. [Installation](#installation): [installer](#installer), [Docker](#docker), [manual](#manual-installation), [first login](#first-login) 2. [Adding a Compute Node](#adding-a-compute-node) -3. [Configuration](#configuration): [environment variables](#environment-variables), [HTTPS and reverse proxy](#https-and-reverse-proxy), [cloud-init datasource](#cloud-init-datasource), [LDAP](#ldap) -4. [Backups](#backups) -5. [Updating](#updating) -6. [Usage](#usage): [users and permissions](#users-roles-and-permissions), [REST API](#rest-api), [screenshots](#screenshots) +3. [Configuration](#configuration): [environment variables](#environment-variables), [HTTPS and reverse proxy](#https-and-reverse-proxy), [cloud-init datasource](#cloud-init-datasource), [LDAP](#ldap), [OTP](#two-factor-login-otp), [serial console](#serial-console) +4. [Backups](#backups): [off-site copy](#off-site-copy) +5. [Updating](#updating): [Docker](#docker-1), [installer and manual](#installer-and-manual-installation), [restore and rollback](#restore-and-rollback), [moving to a new machine](#moving-to-a-new-machine), [behavior changes](#behavior-changes) +6. [Usage](#usage): [users and permissions](#users-roles-and-permissions), [REST API](#rest-api) 7. [Development](#development) ## Installation @@ -96,7 +96,7 @@ EOF docker compose up -d ``` -The panel and its console are at `http://`. The database and secret key live in the `webvirtcloud-data` volume, the SSH keys in `webvirtcloud-ssh`. Other settings go in the same `environment:` list, see [Environment variables](#environment-variables). +The panel and its console are at `http://`. The database and secret key live in the `webvirtcloud-data` volume, the SSH keys in `webvirtcloud-ssh`, the [backups](#backups) in `webvirtcloud-backups`. Other settings go in the same `environment:` list, see [Environment variables](#environment-variables). ### Manual installation @@ -229,7 +229,7 @@ sudo cat /srv/webvirtcloud/data/admin_password # installer or manual docker compose exec webvirtcloud cat data/admin_password # Docker ``` -Sign in at `http://`; you must set a new password at the first login, and the file is then deleted. To choose the name or password yourself, set `ADMIN_USERNAME` and/or `ADMIN_PASSWORD` in the environment before that first `migrate`; a password you set is not written to the file and need not be changed. A lost password is reset with `python3 manage.py changepassword admin`. +Sign in at `http://`; you must set a new password at the first login, and the file is then deleted. To choose the name or password yourself, set `ADMIN_USERNAME` and/or `ADMIN_PASSWORD` in the environment before that first `migrate`; a password you set is not written to the file and need not be changed. A lost password is reset with `python3 manage.py changepassword admin` (Docker: `docker compose exec webvirtcloud /sbin/setuser www-data venv/bin/python3 manage.py changepassword admin`). ## Adding a Compute Node @@ -299,7 +299,12 @@ A compute node is a KVM host the panel manages over libvirt. Firewall: the compute's VNC ports (`5900`–`65535`) must accept connections **only** from the panel's IP, never from public networks. -For VM migration between computes, define shared storage as a storage pool on every host (a VM migrates only when its disk, backing and ISO files and block devices are volumes of the destination's pools), and the hosts send a migrating VM to the destination's address on the panel's Computes page; for another network (a dedicated migration network), set the compute's **Migration address** on its edit page. A VM's disks can instead be copied into storage pools of the destination during the migration: after choosing the destination, the **Disks** list shows each disk file and the destination pools that can take it (directory, filesystem and NFS pools; one with a file of the same name refuses the copy), and a disk on storage both hosts share can also stay there. Plain raw or qcow2 disks without a backing file are copied; a shut-off VM is started paused for the copy, its CPUs never run, and is shut off on the destination. A shut-off VM with a TPM (Windows 11) migrates the same way, also without copies: only a running VM's migration carries its TPM state. With **Delete the source files of copied disks** the source files go after the migration, unless another VM or volume uses them. The copy goes through the destination's migration port range (49152-49215 by default), like the memory. +### Migration + +- **Shared storage:** define it as a storage pool on every host. A VM migrates when its disk, backing and ISO files and block devices are volumes of the destination's pools. +- **Address:** a migrating VM goes to the destination's address on the Computes page; for a dedicated migration network, set the compute's **Migration address** on its edit page. +- **Without shared storage:** after choosing the destination, the **Disks** list shows each disk and the destination pools that can take a copy (directory, filesystem and NFS pools; a pool with a file of the same name refuses it); a disk on storage both hosts share can stay there. Plain raw or qcow2 disks without a backing file are copied, through the destination's migration port range (49152-49215 by default). **Delete the source files of copied disks** removes them after the migration, unless another VM or volume uses them. +- **Shut-off VMs:** a shut-off VM moves offline, with its NVRAM file (UEFI). When its disks are copied or it has a TPM, it is started paused for the migration instead (its CPUs never run) and shut off on the destination. If libvirt warns `Host SMBIOS information is not available`, install `dmidecode` (`apt-get`, `dnf` or `zypper install -y dmidecode`) and restart `libvirtd`. @@ -317,19 +322,38 @@ If libvirt warns `Host SMBIOS information is not available`, install `dmidecode` | `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD`, `EMAIL_USE_TLS` | SMTP for e-mail OTP | | `WEBVIRTCLOUD_LOG_FILE` | log file (default `data/webvirtcloud.log`, rotated at 10 MB × 5) | | `SECRET_KEY` | Django secret key (default: the `data/secret_key` file) | +| `ADMIN_USERNAME`, `ADMIN_PASSWORD` | the first superuser, read by the first `migrate` only, see [First login](#first-login) | Where to set them: - **Docker:** the `environment:` list of `docker-compose.override.yml`; every process in the container gets it. -- **Installer and manual installation:** edit `webvirtcloud/settings.py`, or put them in `/etc/default/webvirtcloud` (root, mode 600), one `NAME='value'` per line (single quotes: systemd and the shell then read the same value); all four services read it. Then `systemctl restart webvirt-cloud webvirt-novncd webvirt-socketiod webvirt-worker`, and load the file before running `manage.py`: `set -a; . /etc/default/webvirtcloud; set +a`. -- **gunicorn** runs at most 8 workers (fewer on hosts with under 4 CPUs) of 4 threads each; to change it, set `GUNICORN_CMD_ARGS=--workers N` in a drop-in of `webvirt-cloud` (`systemctl edit webvirt-cloud`: `[Service]` and `Environment="GUNICORN_CMD_ARGS=--workers N"`) or in `docker-compose.override.yml`. +- **Installer and manual installation:** edit `webvirtcloud/settings.py`, or put them in `/etc/default/webvirtcloud` (root, mode 600), one `NAME='value'` per line (single quotes: systemd and the shell then read the same value); the panel's services read it. Then `systemctl restart webvirt-cloud webvirt-novncd webvirt-socketiod webvirt-worker`, and load the file before running `manage.py`: `set -a; . /etc/default/webvirtcloud; set +a`. + +Some options exist only in `settings.py` (LDAP, `OTP_ENABLED`, `LOGIN_TRUSTED_PROXIES`). Docker builds that file from the template in each new container; to keep such options there, mount your own copy and update it from the template after each update: + +```bash +docker compose exec webvirtcloud cat webvirtcloud/settings.py > settings.py # then edit it +``` + +add it to `docker-compose.override.yml` and run `docker compose up -d`: + +```yaml +services: + webvirtcloud: + volumes: + - ./settings.py:/srv/webvirtcloud/webvirtcloud/settings.py +``` + +The container makes the file the panel user's (uid 33) with mode 600; edit it as root. + +gunicorn runs at most 8 workers (fewer on hosts with under 4 CPUs) of 4 threads each; to change it, set `GUNICORN_CMD_ARGS=--workers N` in a drop-in of `webvirt-cloud` (`systemctl edit webvirt-cloud`: `[Service]` and `Environment="GUNICORN_CMD_ARGS=--workers N"`) or in `docker-compose.override.yml`. ### HTTPS and reverse proxy For a panel served over HTTPS: - set `WEBVIRTCLOUD_HTTPS=1`: session and CSRF cookies become HTTPS-only, HTTP is redirected to HTTPS (except `/datasource/`, which VMs fetch over HTTP), and HSTS is sent for one year; -- add the HTTPS origin to `CSRF_TRUSTED_ORIGINS`, e.g. `CSRF_TRUSTED_ORIGINS=https://wvc.example.com` and `WEBVIRTCLOUD_HTTPS=1` in `/etc/default/webvirtcloud`; +- add the HTTPS origin to `CSRF_TRUSTED_ORIGINS`, e.g. `CSRF_TRUSTED_ORIGINS=https://wvc.example.com` and `WEBVIRTCLOUD_HTTPS=1` in `/etc/default/webvirtcloud`. TLS can end at the bundled nginx or at a proxy in front of it; such a proxy must send `X-Forwarded-Proto: https`. Failed logins are counted per client address, which the bundled nginx passes in `X-Real-IP`. A proxy that replaces the bundled nginx must set `X-Real-IP` itself, and its address must be in `LOGIN_TRUSTED_PROXIES` in `settings.py`. With a proxy in front of the bundled nginx, configure nginx's `set_real_ip_from` / `real_ip_header` for that proxy, or all clients share its address. @@ -349,7 +373,7 @@ Without the network: tick **Cloud-init seed** (Advanced) when creating a VM. The ### LDAP -The options below are set in `webvirtcloud/settings.py`. Variants for Active Directory and OpenLDAP are shown; this is a minimal config, see the [django-auth-ldap documentation](https://django-auth-ldap.readthedocs.io) for more. +The options below are set in `webvirtcloud/settings.py` (Docker: see [Environment variables](#environment-variables) for keeping your own). Variants for Active Directory and OpenLDAP are shown; this is a minimal config, see the [django-auth-ldap documentation](https://django-auth-ldap.readthedocs.io) for more. The Docker image includes the LDAP packages. On an installer or manual install, add them to the virtualenv first; pip builds `python-ldap` against these headers: @@ -376,7 +400,7 @@ AUTH_LDAP_BIND_PASSWORD = "password" # OpenLDAP AUTH_LDAP_SERVER_URI = "ldap://example.com" -AUTH_LDAP_BIND_DN = "CN=username,CN=Users,OU=example,OU=com" +AUTH_LDAP_BIND_DN = "cn=username,ou=users,dc=example,dc=com" AUTH_LDAP_BIND_PASSWORD = "password" ``` @@ -394,10 +418,10 @@ AUTH_LDAP_GROUP_TYPE = NestedActiveDirectoryGroupType() # OpenLDAP AUTH_LDAP_USER_SEARCH = LDAPSearch( - "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(cn=%(user)s)" + "ou=users,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)" ) AUTH_LDAP_GROUP_SEARCH = LDAPSearch( - "CN=Users,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=groupOfUniqueNames)" + "ou=groups,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(objectClass=groupOfUniqueNames)" ) AUTH_LDAP_GROUP_TYPE = GroupOfUniqueNamesType() # import needs to be changed at the top of settings.py ``` @@ -720,65 +744,37 @@ systemctl start webvirt-cloud webvirt-novncd webvirt-socketiod webvirt-worker ### Behavior changes +What an update from an older version changes for operators and users: + - Requests for a host not in `ALLOWED_HOSTS` get 400. The installer writes the server's names and IPs; add more with the `ALLOWED_HOSTS` env var. The cloud-init datasource host must be allowed too. - Logging out needs a POST; a GET to `/accounts/logout/` gets 405. -- The API accepts only a session from the login form (no HTTP Basic), and the API docs need a login. Sessions opened through the old password-only doors skip OTP; end them once after the update (everyone signs in again): `python3 manage.py shell -c "from django.contrib.sessions.models import Session; Session.objects.all().delete()"`. +- The API accepts only a session from the login form or an API token (no HTTP Basic), and the API docs need a login. Sessions opened through the old password-only doors skip OTP; end them once after the update (everyone signs in again): `python3 manage.py shell -c "from django.contrib.sessions.models import Session; Session.objects.all().delete()"`. - Failed logins lock a user (django-axes). The limit and lock time are on the Settings page; unlock with `python3 manage.py axes_reset_username `. - Changing one's own password is the "Can change password" permission (per user or group; new users have it); `SHOW_PROFILE_EDIT_PASSWORD` is gone. - The admin's first-login password change survives losing `data/admin_password` (migration `accounts.0007`); run `migrate` as a user who can read that file. -- "VM Clone Auto Migrate" is removed; a clone stays on its source host. -- The job worker runs at most half of its concurrency (Settings, at least one) of one host's jobs at a time; that host's other jobs wait in the queue, so a host that does not answer cannot take every slot. -- A template VM is changed or deleted only by superusers and staff owners with the matching permission; other owners can still view, open the console and clone it. Power cycle no longer starts a template. -- A VM that vanishes from its compute, or whose compute is deleted, keeps its owners for `INSTANCE_OWNERSHIP_RETENTION_DAYS` (30) in case the same UUID comes back; superusers list and remove these records on the "Removed VMs" admin page. -- The log rotates (10 MB × 5) in `data/webvirtcloud.log`. -- A disk can be grown while its VM runs or is paused, not only when it is shut off. A disk on an LVM pool cannot be grown (libvirt cannot resize its volumes): the resize says so instead of failing, and the VM's other disks still grow. -- Enabling vCPU hot plug keeps the VM's current vCPU count (it enabled all of them up to the maximum). -- A host's CPU graph shows the average since its previous point (normally 5 s) instead of a 1 s sample taken while a worker waits. -- A new VM is made in three steps (host, machine, details) on one form: the disk is a new one, existing volumes or a copy of a template, and flavors are presets that fill vCPU, memory and disk size. A request with more than one disk source is refused. -- The Logs page records who added, changed or deleted a compute, user, group (with its members and permissions), VM owner, flavor, setting, removed-VM record or SSH key, who mailed an OTP QR code, and every login, failed login, lockout and logout, with the address it came from and whether it worked (Result: Done, Failed, Unknown for older rows); a compute's VMs leaving the panel get a row each. On each compute it records changes to networks, storage pools, volumes (including clones and ISO uploads), host interfaces, secrets (never their values) and network filters. -- The CPU usage in the new-VM dialog is the current load (over 1 s), read when the dialog opens; it was the average since the host booted. -- A VM's stats are polled every 5 s like the host graph, the first point as soon as the tab opens; each point is the average since the previous one, disk rates in MB/s (they were MiB/s labelled Mb/s); a counter the host does not report shows a gap instead of 0. -- An ISO uploads to an SSH compute about 3.5 times faster (SFTP writes no longer wait for each 32 KiB); a failed write still fails the upload. -- On a host whose libvirt cannot change network interfaces (the udev backend: RHEL 9 and later, Debian 12), the interface pages offer no create, start, stop or delete; they only failed there. -- Deleting a bridge on a host with the netcf backend (RHEL/AlmaLinux 8) keeps the devices it held: each is defined again on its own with the bridge's start mode and, for a single device, its addresses, as `virsh iface-unbridge` does. They lost their configuration and stayed down after a reboot. -- On a running VM the disk list, its edit form, the QoS table, the title, description, CPU, boot order, video and console fields show the settings as they will be at the next start, so saving an edit no longer reverts another pending change. A boot order that names a device missing from that definition is refused instead of clearing the order. The settings tab of a running VM says so. A QoS edit keeps the inbound floor. Buttons shown as disabled while the VM runs can no longer be submitted with Enter. -- A new disk or CD-ROM on a running VM gets a device name that neither the running VM nor its next-start settings use; it could take the name of a pending disk and stay attached until the next start only. -- The OTP e-mail's QR code is drawn with segno; django-qr-code is no longer required. A `settings.py` kept from an older version still lists `"qr_code"` in `INSTALLED_APPS`: delete that line, or the app does not start in a venv without django-qr-code. -- A disk, NIC or guest agent added to a running VM is requested for both the running VM and its next-start settings in one libvirt call: a disk name or guest agent already pending is refused before anything changes, and a NIC added without a MAC gets the same MAC in both. A failure after the device is plugged can still leave it in the running VM only. -- The VM page shows each NIC's own QoS and each CD-ROM's own pool (they showed the previous device's), and a NIC without a source or model no longer breaks it. -- A volume of an LVM or iSCSI pool can be attached to a VM, and bridge and direct NICs can be boot devices. The NIC model `default` lets libvirt choose, and `rt18139` is `rtl8139`: a VM with either did not start; a migration corrects the default NIC type setting. -- A paused VM's memory is resized as a running VM's: the current memory changes and the guest takes it once resumed, the maximum stays (both only reached the VM at its next boot). -- Cloning a UEFI VM no longer defines a storage pool on the host's NVRAM directory; the clone gets its own copy of the VM's UEFI variables. -- The console .vv file finds the VM by its UUID; without a listen address or password it gives 127.0.0.1 and an empty password instead of "None". -- A running VM without a guest agent shows the IPv4 address the host learned by ARP (the lookup always failed before). -- After a migration the VM's NVRAM file is deleted on the source, when it is in libvirt's `/var/lib/libvirt/qemu/nvram` and the destination does not share that directory (a VM created there later with the same name would start with those UEFI variables). -- gstfsd finds the guest's operating system the way libguestfs inspects it, so a root on LVM works, and it always answers (an error when it finds no or several operating systems). Update `/usr/local/bin/gstfsd` on every compute (see [Adding a Compute Node](#adding-a-compute-node), step 3). -- gstfsd does only what the panel signs with the host's key: it does not start without `GSTFSD_KEY` in `/etc/default/webvirt-gstfsd`, and the panel needs the same value as the host's gstfsd key on its edit page. On every compute, update gstfsd and its unit and make the key as in [Adding a Compute Node](#adding-a-compute-node), step 3 (a remote panel's `GSTFSD_BIND_HOST` and `GSTFSD_ALLOW_REMOTE` move into that file from `systemctl edit webvirt-gstfsd`), then enter the key on each compute's edit page. -- The themes ship compiled in `static/css/themes`; picking one on the Settings page only saves its name, so updates, rollbacks and recreated Docker containers keep it, and the "Theme SASS Path" setting is gone. libsass is no longer installed; `manage.py build_themes` recompiles the themes in a development setup. -- With the bundled nginx config, browsers revalidate static files on each load (304 when unchanged), so an update or a theme change shows without a hard reload. Files cached before this update can stay until a hard reload (Ctrl+F5) of each affected page, or until the site's browser cache is cleared once; an external caching proxy may need a purge. -- External snapshots use libvirt's snapshot API and need libvirt 9.9 or newer on the compute hosts. They work on UEFI VMs and running, paused or shut-off VMs, can save memory too or, on a running VM with a connected QEMU guest agent, freeze the guest's file systems (the default there), and a revert keeps disks added later (it detaches them). A snapshot is refused when a storage pool with the VM's disks has less free space than a share of those disks (10%, at least 1 GiB; both on the Settings page) plus, for the pool of the memory file, the VM's memory; this is checked before the snapshot only, nothing is reserved. A VM's snapshots form one chain: after a revert, delete the newer snapshots before taking another. Snapshot names no longer get an `s1.` prefix; existing ones keep theirs and can still be reverted and deleted, except that a snapshot an older version took of a UEFI VM can only be deleted. On NFS, libvirt removes merged snapshot files as the qemu user, who needs write access to the image directory; files it could not remove are named in a warning after the delete or revert. Deleting a VM with its data removes its snapshot files too, except a template it grew from and files another VM uses. -- A storage volume a VM still needs (a disk, a backing file or a snapshot's file) is no longer deleted from the storage page or the API; the delete is refused with the reason. Only VMs on the same compute are checked. -- The `webvirt-novncd` and `webvirt-socketiod` units run sandboxed (read-only system directories, no home directories under `/home`, no new privileges); the units installed in step 4 bring this. -- The VNC console connects to `/novncd/` on the panel's own address, scheme and port, through nginx: it works on HTTPS, behind another proxy and on any published port without settings. `WS_PUBLIC_PORT`, `WS_PUBLIC_HOST`, `WS_PUBLIC_PATH` and `WS_CERT` are gone; remove them from `docker-compose.override.yml`, `/etc/default/webvirtcloud` or a kept `settings.py`, set `WS_HOST = "127.0.0.1"` in a kept `settings.py`, and close port 6080 in the firewall. -- The serial console works (off by default, see [Serial console](#serial-console)); `SOCKETIO_PUBLIC_HOST`/`_PORT`/`_PATH` are gone, the page uses the panel's own address. -- Long operations run as jobs in a worker process (`manage.py run_worker`); follow them on the VM page and on the Jobs page. -- Cloning a VM or a volume and creating a VM run as jobs: the page returns at once and the job panel follows them. The API's VM create answers 202 with the job and needs a new `submission_key` per request. The create form no longer takes a console password; set it on the VM page. -- Taking and reverting a snapshot run as jobs, like deleting an external snapshot: the page returns at once and the job panel follows them. Deleting an internal snapshot stays immediate. -- Migrating a VM runs as a job: the page returns at once, the job panel shows its progress, and a running migration can be cancelled there (the VM keeps running on its source host). The 540 s limit is gone. The API's migrate answers 202 with the job and needs a new `submission_key` per request. -- Uploading an ISO is tracked as a job: the storage page's job panel shows it and can cancel it, and the page no longer reloads when it ends. The upload dialog closes once the upload starts; the browser still sends the file, so stay on the page until it ends. An upload left idle for an hour is ended and its partial file deleted. -- A running or paused VM can be cloned: libvirt copies its disks from one instant while it keeps running (file systems are frozen for a moment when the guest agent is ready). It needs libvirt 11.10 or later on the host, local file disks and no TPM; the VM cannot be changed from the panel until the copy ends, and the copy can be cancelled. Cancelling a clone of a shut-off VM has no effect: it shows as cancelling until the copy ends. A target pool that fills up during the copy can pause the source VM; a clone that ends uncertain keeps the VM locked until a superuser resolves the job. -- A shut-off UEFI VM can be migrated: its NVRAM file is copied to the destination host (unless both hosts share the NVRAM directory). A shut-off VM with TPM state is started paused for the migration, which carries the state, and shut off on the destination. -- Manual installs that keep their own `settings.py` copy the SQLite `OPTIONS` and `TEST` entries from `settings.py.template` and add `"operations"` to `INSTALLED_APPS`. -- A host's Devices page lists its PCI devices by IOMMU group and its USB devices, with what the host itself has on each (network interfaces, disks, its graphics card) and the VMs that name it. Manual installs that keep their own `settings.py` add `"nodedevs"` to `INSTALLED_APPS`. -- A user's quota counts, for each VM, the larger of its running and its next-start vCPUs, memory and disks, and a queued clone as one VM from the moment it is accepted. A user can be over the quota after the update; nothing is stopped, but new VMs, clones and raises are refused until it fits. -- A user who is not a superuser names a clone with one of the free names the clone form offers (the first one with automatic names); other names are refused. -- Deleting a VM with its disk files keeps a file that a VM or volume of another compute uses at the same path (shared storage), and is refused before the VM is stopped when one of the panel's other computes cannot be reached; the message names it. -- An internal snapshot is reverted only on a shut-off VM; the Snapshots tab offers external snapshots first and internal ones as a fallback. -- The SQLite database must be on a local file system (WAL). -- Outside compose, stop the Docker container with `docker stop -t 95` so the worker can finish running jobs. -- Installer and manual installations run the panel as systemd units (`webvirt-cloud`, `webvirt-novncd`, `webvirt-socketiod`, `webvirt-worker`) and computes run `webvirt-gstfsd`, instead of supervisor; see [Moving from supervisor to systemd](#moving-from-supervisor-to-systemd). Service settings go into `/etc/default/webvirtcloud`, service output into the journal (`journalctl -u webvirt-cloud`); the app log stays in `data/`. -- LDAP login's packages are in `conf/requirements-ldap.txt` and no longer installed by default, nor their build headers by the installer; the Docker image keeps them. An existing virtualenv keeps them, but only installing that file updates them (see [LDAP](#ldap) and step 3). -- The panel backs itself up every day ([Backups](#backups)); in Docker into a new volume, `webvirtcloud-backups`. Installer and manual installations get it with the units of step 4. +- A `settings.py` kept from an older version must match the template: copy its SQLite `OPTIONS` and `TEST` entries, add `"operations"` and `"nodedevs"` to `INSTALLED_APPS`, and delete `"qr_code"` (django-qr-code is no longer installed and the app does not start with it). Step 2 of the update does this by rebuilding the file. +- The VNC console connects to `/novncd/` on the panel's own address through nginx, and the serial console to `/socket.io/`: they work on HTTPS and behind another proxy without settings. `WS_PUBLIC_PORT`, `WS_PUBLIC_HOST`, `WS_PUBLIC_PATH`, `WS_CERT` and `SOCKETIO_PUBLIC_HOST`/`_PORT`/`_PATH` are gone; remove them from `docker-compose.override.yml`, `/etc/default/webvirtcloud` or a kept `settings.py`, set `WS_HOST = "127.0.0.1"` in a kept `settings.py`, and close port 6080 in the firewall. +- Installer and manual installations run the panel as systemd units (`webvirt-cloud`, `webvirt-novncd`, `webvirt-socketiod`, `webvirt-worker`, `webvirt-backup.timer`) and computes run `webvirt-gstfsd`, instead of supervisor; see [Moving from supervisor to systemd](#moving-from-supervisor-to-systemd). Service settings go into `/etc/default/webvirtcloud`, service output into the journal (`journalctl -u webvirt-cloud`); the app log stays in `data/`. novncd and socketiod run sandboxed (read-only system directories, no `/home`). +- gstfsd does only what the panel signs with the host's key: it does not start without `GSTFSD_KEY` in `/etc/default/webvirt-gstfsd`. On every compute, update gstfsd and its unit and make the key as in [Adding a Compute Node](#adding-a-compute-node), step 3 (a remote panel's `GSTFSD_BIND_HOST` and `GSTFSD_ALLOW_REMOTE` move into that file from `systemctl edit webvirt-gstfsd`), then enter the key on each compute's edit page. +- LDAP login's packages are in `conf/requirements-ldap.txt` and no longer installed by default, nor their build headers by the installer; the Docker image keeps them. An existing virtualenv keeps them, but only installing that file updates them (see [LDAP](#ldap)). +- The themes ship compiled; picking one on the Settings page only saves its name, and the "Theme SASS Path" setting is gone. Browsers revalidate static files on each load: files cached before the update can stay until a hard reload (Ctrl+F5) of each page; an external caching proxy may need a purge. +- The panel backs itself up every day ([Backups](#backups)); in Docker into a new volume, `webvirtcloud-backups`. +- The SQLite database must be on a local file system (WAL). Outside compose, stop the Docker container with `docker stop -t 95` so the worker can finish running jobs. +- Long operations run as jobs in a worker process (`manage.py run_worker`): creating, cloning and migrating VMs, cloning volumes, taking and reverting snapshots and deleting external snapshots. The page returns at once and the job panel and the Jobs page follow them; a migration can be cancelled. The API's VM create and migrate answer 202 with the job and need a new `submission_key` per request. The create form no longer takes a console password; set it on the VM page. +- An ISO upload is tracked as a job that can be cancelled. The browser sends the file, so stay on the page until it ends; an upload left idle for an hour is ended and its partial file deleted. +- A clone of a running VM (libvirt 11.10 or later, local file disks, no TPM) locks the VM until the copy ends and can be cancelled; cancelling a clone of a shut-off VM has no effect. A job that ends uncertain keeps its VM locked until a superuser resolves it on its job page. +- The job worker runs at most half of its concurrency (Settings, at least one) of one host's jobs at a time, so a host that does not answer cannot take every slot. +- A new VM is made in three steps (host, machine, details) on one form; flavors are presets that fill vCPU, memory and disk size. "VM Clone Auto Migrate" is removed; a clone stays on its source host. +- A user's quota counts, for each VM, the larger of its running and its next-start vCPUs, memory and disks, and a queued clone as one VM. A user can be over the quota after the update; nothing is stopped, but new VMs, clones and raises are refused until it fits. +- A user who is not a superuser names a clone with one of the free names the clone form offers; other names are refused. +- A template VM is changed or deleted only by superusers and staff owners with the matching permission; other owners can still view, open the console and clone it. +- On a running VM the edit forms show the settings as they will be at the next start, so saving an edit no longer reverts another pending change. +- External snapshots need libvirt 9.9 or newer on the computes. A VM's snapshots form one chain: after a revert, delete the newer snapshots before taking another. An internal snapshot is reverted only on a shut-off VM. Snapshot names no longer get an `s1.` prefix. A snapshot an older version took of a UEFI VM can only be deleted, not reverted. On NFS, the qemu user needs write access to the image directory to remove merged snapshot files. +- A storage volume a VM still needs (a disk, a backing file or a snapshot's file) is not deleted; deleting a VM with its files keeps a file another compute's VM or volume uses at the same path, and is refused before the VM is stopped when one of the other computes cannot be reached. +- A VM that vanishes from its compute, or whose compute is deleted, keeps its owners for `INSTANCE_OWNERSHIP_RETENTION_DAYS` (30) in case the same UUID comes back; superusers manage these records on the "Removed VMs" page. +- The Logs page records who changed what (computes, users, groups, VM owners, settings, SSH keys, host networks, pools, volumes, interfaces, secrets and network filters) and every login, failed login and lockout, with the address and the result. +- On a host whose libvirt cannot change network interfaces (the udev backend: RHEL 9 and later, Debian 12), the interface pages offer no create, start, stop or delete. +- The panel is offered in English, Turkish and Simplified Chinese. ## Usage @@ -799,20 +795,6 @@ The REST API (Django REST Framework, documented with `drf-spectacular`) takes th curl -H "Authorization: Token wvc_..." https:///api/v1/instances/ ``` -### Screenshots - -| Instance Detail | -|:---:| -| ![Instance Detail](doc/images/instance.PNG) | - -| Grouped Instances | Non-Grouped Instances | -|:---:|:---:| -| ![Grouped Instances](doc/images/grouped.PNG) | ![Non-Grouped Instances](doc/images/nongrouped.PNG) | - -| Compute Hosts | Activity Log | -|:---:|:---:| -| ![Compute Hosts](doc/images/hosts.PNG) | ![Activity Log](doc/images/log.PNG) | - ## Development Run every step as your normal user, not with `sudo`: if `manage.py` ever runs as root, `db.sqlite3` and `data/` end up root-owned and later runs fail with "readonly database" or "Permission denied". diff --git a/doc/images/grouped.PNG b/doc/images/grouped.PNG deleted file mode 100644 index b6140c9aec2ecacdeb01edfe61ceb715f7e19bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32516 zcmdqJXH=8h*Ds2)6}JlPjRIQ{5HVB%rG*|Fy(v{{RJuSQv=CahTag`*-n(>>CN+To zvCyj&2@paggc=}HLkN%)_Wr-;o-yu+`{msCo^e0G8qYIUdDfb1%{70&IcJcMOmsQV zUp>#p#>T0y_t1=ujUCFyc53oHvVjETwhQAPIdddcV=UY$kcy$&m!1y{fGgxaLZc?%>xw;tyD1HVtT7{ zUS}#qjhT;;`-G!6xn1Fbr1>lJmA0G<-(U5EK0y}?N53z~PwCHjNtnn~*{T@xnfUfe zjvAcye|%NoVp^x=P5zgOE_c&7PupG3jOplnc54ZiM~%o6+*}hheSQD_@1tC8V9#(X ziRZd&ZM@O_$IDZ-^N9UD7&G~|`{zVnv;Ot!NI*|Y)!(T?ev0` zPL0uNad_JcDx^LFA&u8+_8GF+4;M=**|M$?OwIeOo+SJ|QWZ={Y&WO&tuoD8H;DNy zmyB2O>%?|Pxb;E6T>31hQH5n*5`s3}za-%M^PGe^@>66B<|14(aRJjTdEr9X; zeZb$69tA5<$;1(@sk-+82Po!HnnrWP{bMQ3s{2yuD&|8?+JO(Zgdv(a_W&Er;Vik#;4G7#)KD4#lz1^G;d=p`hb8Kp zb~ZcQTeeFsS6aMhi9W=X_94No^a6^pU!MEw-%W|zw2hu`&2b%1Ij(@Es3up^KZY)m z`2k};`}d-~jCq*{&*4e?ga zZU?o6&|rQYrC9Z>&fB)$r_}XTmdW^vmPN>zrWm2P$A|U?BOmu&u_1}sc1RJd%GN_I zj|UN)M%j88Q+dBed)=^i^OXn##_H3uCwM@ zmi`44q+z}tEbJBp9_k7?nI(6YwyS{F)k$9+svhwr7}wgNxfMNi78-MF|AVQcG)e~a zD^jiVH7eWzS59&C`tJ62xTCYk8dmHd{vr!1L97maTHZCMkwuG|PFtr?Gzw-Xzo+(m5ch!b;OhKfBvh)E% ztxv%8j+C_X%{=R8*X=>#R3WSsJsL2i**-c9qiI}GZJfev?8LM${&ScIUU%So5?>Yt zUgeCTB}gmHe$Lw@e>TX$HX3}CB-CY#%A6B+GeI)uT&H-}x71&*OANBk1{kV>-BkL?z z=O^$F(t}aGc~;b*sy*h`@zTVxA8oJ&a=7`(=|G$h$?s{W-f?pml72Ww7J-Tf;Y{q9XC)hHie- zpuVp$F=JmStHy|gLjuN6?e>?k?-W+DcA1U0Ir_>-CFHD;Et@FrkxdUjT;X))6oNkSSzDVvDc76`;D-+ zk~+Zj8F@=7)!G;%p~HbbT7Y=U&PMvHYQHQn`*$WGAEq^-}ug(Q&R8wMitJx&#prX&Zbr$u+XQ2aESfo++)xpYBXrY~nOX zTk$bZF>Ss9OgvpyUf9u@e_;&#ZKKb zwZJWtto^&vo5G^9_l{p$lL#tD>{;j(X=rMkpUoK0(nj)+_D?laBOUuM&Fg9fx~mMs z+Pw3Zule-7#2Px(kYCzIjW>4ybSoPaJ8_!`S>yK|sW+u;p_^Ad;RP!N6y74r(;6_` zL0IJ=xEVGT`#OF26fmn|YbmIoSv#RY6Kd!<170?hOIYzE3!yssAE8=1F8H?mNk{!^ zWQtvmsy43^y4sf4=HMsDGCmS6lHv6PuUY?XVWCv^SDiHalZc-WcOzfe+wjJ2#m-

x7v}@>c*<FM0|U}gFiRNv*eTf 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∈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 C?P9j;;yj#wTZbLd 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 WzOvY0a}TJfO{b3gc~g&_zxr>Q<4`*Q diff --git a/doc/images/instance.PNG b/doc/images/instance.PNG deleted file mode 100644 index 3c3f1afe2ce88f697e16d539272713f96dcc88ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20868 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 YCko%5Z3zDwIl~_k;*vh+#~%CUKkYlYdjJ3c diff --git a/doc/images/log.PNG b/doc/images/log.PNG deleted file mode 100644 index a29cffe44acbcf608d689d3624c69f6e7c36284e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29162 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 MtsRe496piw56!P4Y5)KL diff --git a/doc/images/readme.md b/doc/images/readme.md deleted file mode 100644 index d703cba3..00000000 --- a/doc/images/readme.md +++ /dev/null @@ -1 +0,0 @@ -IMAGES diff --git a/doc/readme.md b/doc/readme.md deleted file mode 100644 index e845566c..00000000 --- a/doc/readme.md +++ /dev/null @@ -1 +0,0 @@ -README