From e980aca2ffc0977342727776333b6ff57575d851 Mon Sep 17 00:00:00 2001 From: catborise Date: Sat, 26 Sep 2026 22:34:13 +0300 Subject: [PATCH] feat(console): remove deprecated SPICE support in favor of noVNC - Remove obsolete spice-html5 static assets and SPICE console templates - Restrict default console types to VNC with migration 0012 - Filter out SPICE in VM creation form and backend capabilities - Return friendly deprecation notice if legacy VM is opened with SPICE - Clean up docs, architecture references, and libvirt-bootstrap scripts --- .gitignore | 1 + README.md | 6 +- .../0012_remove_spice_qemu_console_type.py | 38 + conf/test-vm.xml | 2 +- console/templates/console-spice-full.html | 231 - console/templates/console-spice-lite.html | 231 - console/tests.py | 19 +- console/views.py | 9 +- doc/architecture.md | 6 +- instances/templates/create_instance_w2.html | 6 + static/js/spice-html5/atKeynames.js | 189 - static/js/spice-html5/bitmap.js | 64 - static/js/spice-html5/cursor.js | 141 - static/js/spice-html5/display.js | 1272 - static/js/spice-html5/enums.js | 372 - static/js/spice-html5/filexfer.js | 94 - static/js/spice-html5/inputs.js | 335 - static/js/spice-html5/lz.js | 188 - static/js/spice-html5/main.js | 520 - static/js/spice-html5/playback.js | 409 - static/js/spice-html5/png.js | 262 - static/js/spice-html5/port.js | 94 - static/js/spice-html5/quic.js | 1345 - static/js/spice-html5/resize.js | 90 - static/js/spice-html5/simulatecursor.js | 208 - static/js/spice-html5/spice.css | 115 - static/js/spice-html5/spicearraybuffer.js | 58 - static/js/spice-html5/spiceconn.js | 526 - static/js/spice-html5/spicedataview.js | 124 - static/js/spice-html5/spicemsg.js | 1371 - static/js/spice-html5/spicetype.js | 497 - .../browser-es-module-loader/.npmignore | 0 .../browser-es-module-loader/README.md | 15 - .../dist/babel-worker.js | 55799 ---------------- .../dist/browser-es-module-loader.js | 1486 - .../dist/browser-es-module-loader.js.map | 1 - .../browser-es-module-loader/rollup.config.js | 16 - .../src/babel-worker.js | 25 - .../src/browser-es-module-loader.js | 280 - static/js/spice-html5/thirdparty/jsbn.js | 593 - static/js/spice-html5/thirdparty/prng4.js | 84 - static/js/spice-html5/thirdparty/rng.js | 107 - static/js/spice-html5/thirdparty/rsa.js | 153 - static/js/spice-html5/thirdparty/sha1.js | 351 - static/js/spice-html5/ticket.js | 260 - static/js/spice-html5/utils.js | 360 - static/js/spice-html5/webm.js | 673 - static/js/spice-html5/wire.js | 131 - 48 files changed, 62 insertions(+), 69095 deletions(-) create mode 100644 appsettings/migrations/0012_remove_spice_qemu_console_type.py delete mode 100644 console/templates/console-spice-full.html delete mode 100644 console/templates/console-spice-lite.html delete mode 100644 static/js/spice-html5/atKeynames.js delete mode 100644 static/js/spice-html5/bitmap.js delete mode 100644 static/js/spice-html5/cursor.js delete mode 100644 static/js/spice-html5/display.js delete mode 100644 static/js/spice-html5/enums.js delete mode 100644 static/js/spice-html5/filexfer.js delete mode 100644 static/js/spice-html5/inputs.js delete mode 100644 static/js/spice-html5/lz.js delete mode 100644 static/js/spice-html5/main.js delete mode 100644 static/js/spice-html5/playback.js delete mode 100644 static/js/spice-html5/png.js delete mode 100644 static/js/spice-html5/port.js delete mode 100644 static/js/spice-html5/quic.js delete mode 100644 static/js/spice-html5/resize.js delete mode 100644 static/js/spice-html5/simulatecursor.js delete mode 100755 static/js/spice-html5/spice.css delete mode 100644 static/js/spice-html5/spicearraybuffer.js delete mode 100644 static/js/spice-html5/spiceconn.js delete mode 100644 static/js/spice-html5/spicedataview.js delete mode 100644 static/js/spice-html5/spicemsg.js delete mode 100644 static/js/spice-html5/spicetype.js delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/.npmignore delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/README.md delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/dist/babel-worker.js delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/dist/browser-es-module-loader.js.map delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/rollup.config.js delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/src/babel-worker.js delete mode 100644 static/js/spice-html5/thirdparty/browser-es-module-loader/src/browser-es-module-loader.js delete mode 100644 static/js/spice-html5/thirdparty/jsbn.js delete mode 100644 static/js/spice-html5/thirdparty/prng4.js delete mode 100644 static/js/spice-html5/thirdparty/rng.js delete mode 100644 static/js/spice-html5/thirdparty/rsa.js delete mode 100644 static/js/spice-html5/thirdparty/sha1.js delete mode 100644 static/js/spice-html5/ticket.js delete mode 100644 static/js/spice-html5/utils.js delete mode 100644 static/js/spice-html5/webm.js delete mode 100644 static/js/spice-html5/wire.js diff --git a/.gitignore b/.gitignore index bc289ab1..935ec575 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ htmlcov *.log templates/webvirtcloud.code-workspace DEPENDENCY_UPGRADE_PLAN.md +.agents diff --git a/README.md b/README.md index 22c81c92..99992ae8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## Description -WebVirtCloud is a virtualization web interface for administrators and users. It allows delegating virtual machines to users with role-based permissions. A built-in noVNC / SPICE console presents a full graphical interface to the guest domain. KVM is currently the supported hypervisor. +WebVirtCloud is a virtualization web interface for administrators and users. It allows delegating virtual machines to users with role-based permissions. A built-in noVNC console presents a full graphical interface to the guest domain. KVM is currently the supported hypervisor. ## Features * QEMU/KVM Hypervisor Management @@ -14,7 +14,7 @@ WebVirtCloud is a virtualization web interface for administrators and users. It * Manage Multiple QEMU/KVM Hypervisors * Manage Hypervisor Datastore pools and storage volumes * Manage Hypervisor Networks and interfaces -* Instance Console Access with Web Browsers (noVNC & SPICE) +* Instance Console Access with Web Browsers (noVNC & xterm.js) * Libvirt API-based web management UI * User-based Authorization, Authentication, and 2FA (OTP) * User can add SSH public key to root in Instance @@ -322,7 +322,7 @@ sudo zypper install -y dmidecode && sudo systemctl restart libvirtd ``` > **Security Notice (Compute Node Firewall):** -> Libvirt compute nodes listen on VNC/SPICE ports (`5900`–`65535`) to allow WebVirtCloud to proxy graphical consoles. Ensure your firewall (`ufw`, `firewalld`, or `iptables`) restricts these ports to accept connections **only** from the WebVirtCloud panel IP, and never exposes them directly to public networks. +> Libvirt compute nodes listen on VNC ports (`5900`–`65535`) to allow WebVirtCloud to proxy graphical consoles. Ensure your firewall (`ufw`, `firewalld`, or `iptables`) restricts these ports to accept connections **only** from the WebVirtCloud panel IP, and never exposes them directly to public networks. --- diff --git a/appsettings/migrations/0012_remove_spice_qemu_console_type.py b/appsettings/migrations/0012_remove_spice_qemu_console_type.py new file mode 100644 index 00000000..2c9f356a --- /dev/null +++ b/appsettings/migrations/0012_remove_spice_qemu_console_type.py @@ -0,0 +1,38 @@ +from django.db import migrations + + +def update_console_type(apps, schema_editor): + AppSettings = apps.get_model("appsettings", "AppSettings") + db_alias = schema_editor.connection.alias + setting = ( + AppSettings.objects.using(db_alias) + .filter(key="QEMU_CONSOLE_DEFAULT_TYPE") + .first() + ) + if setting: + setting.value = "vnc" + setting.choices = "vnc" + setting.save(using=db_alias) + + +def reverse_console_type(apps, schema_editor): + AppSettings = apps.get_model("appsettings", "AppSettings") + db_alias = schema_editor.connection.alias + setting = ( + AppSettings.objects.using(db_alias) + .filter(key="QEMU_CONSOLE_DEFAULT_TYPE") + .first() + ) + if setting: + setting.choices = "vnc,spice" + setting.save(using=db_alias) + + +class Migration(migrations.Migration): + dependencies = [ + ("appsettings", "0011_alter_appsettings_id"), + ] + + operations = [ + migrations.RunPython(update_console_type, reverse_console_type), + ] diff --git a/conf/test-vm.xml b/conf/test-vm.xml index d14f25f9..9750668d 100644 --- a/conf/test-vm.xml +++ b/conf/test-vm.xml @@ -105,7 +105,7 @@ - +