* [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs
@ 2025-01-30 11:31 Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required Daniel Herzig
` (6 more replies)
0 siblings, 7 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
This patch series addresses bugzilla entry #4225.
Currently VMs refuse to to start if a configured isofile becomes unavailable,
be it a deleted file or an unavailable network storage.
This patch series introduces a new parameter in Drive.pm, called 'essential'.
Depending on whether this parameter is set or not, the situation will be handled
differently.
If the parameter is set to 0, the configuration will temporarily changed to use
'none' as file for the cd drive, which allows qemu to start up the machine.
The configuration is not changed in this process to avoid unexpected behaviour.
Instead a log_warn will be issued.
For transition reasons an unset parameter acts like 'required=1'. In this case
the startup process will die earlier than currently, if the file is missing or
the underlying storage not available.
If a new VM is created from the WebGUI, a corresponding added checkbox
is checked by default, but allows for convenient unchecking during setup time,
eg for media that is only needed for installation time.
This patch series adds an 'Eject' button to the hardwareview in the WebGUI,
which can be used as a convenience shortcut to setting file to 'none' for the
cdrom drive.
This series supersedes:
https://lore.proxmox.com/pve-devel/20250113085608.99498-1-d.herzig@proxmox.com/
Changes since v2:
* rebased onto current masters (qemu-server: 0fc03fc1, pve-manager: bbba1c53)
* refactored patch series structure (THX @Dano)
* shortened code and streamlined code logic (qemu-server, THX @Dano)
* reduced changes on testing framework (qemu-server)
* reuse existing code for parsing values (pve-manager, THX @Friedrich)
* properly html-encode warning messages (pve-manager, THX @Friedrich)
qemu-server: Daniel Herzig (3):
fix #4225: qemuserver: drive: add parameter to mark drive required
fix #4225: qemuserver: introduce sub eject_nonrequired_isos
fix #4225: qemuserver, test: put eject_nonrequired_isos in place
PVE/QemuServer.pm | 37 ++++++++++++++++++
PVE/QemuServer/Drive.pm | 9 ++++-
test/cfg2cmd/ide-required-iso-missing.conf | 12 ++++++
.../cfg2cmd/ide-required-iso-missing.conf.cmd | 0
.../cfg2cmd/ide-required-iso-offline-nfs.conf | 12 ++++++
.../ide-required-iso-offline-nfs.conf.cmd | 0
test/cfg2cmd/ide-required.conf | 14 +++++++
test/cfg2cmd/ide-required.conf.cmd | 39 +++++++++++++++++++
test/cfg2cmd/ide-unrequired-iso-missing.conf | 12 ++++++
.../ide-unrequired-iso-missing.conf.cmd | 33 ++++++++++++++++
.../ide-unrequired-iso-offline-nfs.conf | 12 ++++++
.../ide-unrequired-iso-offline-nfs.conf.cmd | 33 ++++++++++++++++
test/run_config2command_tests.pl | 36 +++++++++++++++++
13 files changed, 248 insertions(+), 1 deletion(-)
create mode 100644 test/cfg2cmd/ide-required-iso-missing.conf
create mode 100644 test/cfg2cmd/ide-required-iso-missing.conf.cmd
create mode 100644 test/cfg2cmd/ide-required-iso-offline-nfs.conf
create mode 100644 test/cfg2cmd/ide-required-iso-offline-nfs.conf.cmd
create mode 100644 test/cfg2cmd/ide-required.conf
create mode 100644 test/cfg2cmd/ide-required.conf.cmd
create mode 100644 test/cfg2cmd/ide-unrequired-iso-missing.conf
create mode 100644 test/cfg2cmd/ide-unrequired-iso-missing.conf.cmd
create mode 100644 test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf
create mode 100644 test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf.cmd
pve-manager: Daniel Herzig (3):
fix #4225: ui: form: isoselector: add checkbox for 'essential' param
fix #4225: ui: qemu: cdedit: enable 'Essential' checkbox for isos
fix #4225: ui: qemu: hardware: add eject button for cdroms
www/manager6/form/IsoSelector.js | 22 ++++++++++++++++
www/manager6/qemu/CDEdit.js | 8 ++++++
www/manager6/qemu/HardwareView.js | 42 +++++++++++++++++++++++++++++++
3 files changed, 72 insertions(+)
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos Daniel Herzig
` (5 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
This commit add the parameter `essential` to mark a drive as required
for booting the VM.
Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
PVE/QemuServer/Drive.pm | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/PVE/QemuServer/Drive.pm b/PVE/QemuServer/Drive.pm
index 1041c1dd..38136787 100644
--- a/PVE/QemuServer/Drive.pm
+++ b/PVE/QemuServer/Drive.pm
@@ -266,7 +266,14 @@ my %drivedesc_base = (
verbose_description => "Mark this locally-managed volume as available on all nodes.\n\nWARNING: This option does not share the volume automatically, it assumes it is shared already!",
optional => 1,
default => 0,
- }
+ },
+ essential => {
+ type => 'boolean',
+ description => 'Mark this iso volume as required for booting the VM.',
+ verbose_description => 'If unset or set to 1, and the iso file is unavailable, the VM will not start.\nThis parameter is considered for cdrom iso drives only.',
+ optional => 1,
+ default => 1,
+ },
);
my %iothread_fmt = ( iothread => {
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place Daniel Herzig
` (4 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
The function `eject_nonrequired_isos` checks on whether a cdrom drive is
marked as required for booting the VM or not. If the parameter `essential` is not
defined, it will assume `essential` to be true and keep the current
behaviour.
If `required` is set to 0, the function 'ejects' the ISO file by
setting the drive's file value to 'none', if the underlying storage is
unavailable or if the defined file is unavailable for another reason.
The function is meant to be called from `config_to_command` while it
iterates over all volumes to allow for early storage activation and
early exit in the case of missing required files or unavailable
network storages.
This commit also adds a small helper sub `file_exists` to facilitate
mocking of file existence, which is needed for testing
`eject_nonrequired_isos` once in place.
---
PVE/QemuServer.pm | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 808c0e1c..d151c322 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -8797,4 +8797,39 @@ sub delete_ifaces_ipams_ips {
}
}
+sub eject_nonrequired_isos {
+ my ($ds, $drive, $vmid, $storecfg, $conf) = @_;
+
+ # exclude cloudinit drives from processing (parameter '1')
+ return if ( !drive_is_cdrom($drive, 1) ||
+ $drive->{file} eq 'none' ||
+ $drive->{file} eq 'cdrom' );
+
+ $drive->{essential} = 1 if !defined($drive->{essential});
+ my $iso_volid = $drive->{file};
+ my $iso_path = PVE::QemuServer::Drive::get_iso_path($storecfg, $vmid, $iso_volid);
+ my $store_err;
+ if ($iso_volid !~ m|^/|) {
+ my $iso_storage = PVE::Storage::parse_volume_id($iso_volid, 1);
+ eval { PVE::Storage::activate_storage($storecfg, $iso_storage); };
+ $store_err = $@;
+ }
+
+ return if ( !$store_err &&
+ file_exists($iso_path) );
+
+ if ($drive->{essential}) {
+ die "'${ds}: ${iso_volid}': storage unavailable or file does not exist\n";
+ } else {
+ log_warn("eject '${ds}: ${iso_volid}': storage unavailable or file does not exist");
+ $drive->{file} = 'none';
+ $conf->{$ds} = print_drive($drive);
+ }
+}
+
+sub file_exists {
+ my $file_path = shift;
+ return -e $file_path
+}
+
1;
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 4/6] fix #4225: ui: form: isoselector: add checkbox for 'essential' param Daniel Herzig
` (3 subsequent siblings)
6 siblings, 1 reply; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
This commit puts `eject_nonrequired_isos` into the foreach_volume
section of `config_to_command`.
To ensure successful package-building it also does a few adaptions to
the test framework. Namely these are:
* Mock cifs-store to appear as online against a call from
PVE::Storage::activate_storage.
* Add an nfs-offline storage to allow for comparitative testing.
* Mock all files tested by `file_exists` as existing, except the path
contains the 'magic string' 'I_DO_NOT_EXIST'.
* Put `log_warn` output into actual warn context to allow catching the
warnings during testing.
* Add testcases for new behaviour triggered by `eject_nonrequired_isos`.
Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
PVE/QemuServer.pm | 2 +
test/cfg2cmd/ide-required-iso-missing.conf | 12 ++++++
.../cfg2cmd/ide-required-iso-missing.conf.cmd | 0
.../cfg2cmd/ide-required-iso-offline-nfs.conf | 12 ++++++
.../ide-required-iso-offline-nfs.conf.cmd | 0
test/cfg2cmd/ide-required.conf | 14 +++++++
test/cfg2cmd/ide-required.conf.cmd | 39 +++++++++++++++++++
test/cfg2cmd/ide-unrequired-iso-missing.conf | 12 ++++++
.../ide-unrequired-iso-missing.conf.cmd | 33 ++++++++++++++++
.../ide-unrequired-iso-offline-nfs.conf | 12 ++++++
.../ide-unrequired-iso-offline-nfs.conf.cmd | 33 ++++++++++++++++
test/run_config2command_tests.pl | 36 +++++++++++++++++
12 files changed, 205 insertions(+)
create mode 100644 test/cfg2cmd/ide-required-iso-missing.conf
create mode 100644 test/cfg2cmd/ide-required-iso-missing.conf.cmd
create mode 100644 test/cfg2cmd/ide-required-iso-offline-nfs.conf
create mode 100644 test/cfg2cmd/ide-required-iso-offline-nfs.conf.cmd
create mode 100644 test/cfg2cmd/ide-required.conf
create mode 100644 test/cfg2cmd/ide-required.conf.cmd
create mode 100644 test/cfg2cmd/ide-unrequired-iso-missing.conf
create mode 100644 test/cfg2cmd/ide-unrequired-iso-missing.conf.cmd
create mode 100644 test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf
create mode 100644 test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf.cmd
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index d151c322..b8d81a21 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -3826,6 +3826,8 @@ sub config_to_command {
PVE::QemuConfig->foreach_volume($conf, sub {
my ($ds, $drive) = @_;
+ eject_nonrequired_isos($ds, $drive, $vmid, $storecfg, $conf);
+
if (PVE::Storage::parse_volume_id($drive->{file}, 1)) {
check_volume_storage_type($storecfg, $drive->{file});
push @$vollist, $drive->{file};
diff --git a/test/cfg2cmd/ide-required-iso-missing.conf b/test/cfg2cmd/ide-required-iso-missing.conf
new file mode 100644
index 00000000..7f9abf87
--- /dev/null
+++ b/test/cfg2cmd/ide-required-iso-missing.conf
@@ -0,0 +1,12 @@
+# TEST: Config with default machine type, Linux & one IDE CD-ROM with online storage and missing required ISO file.
+# EXPECT_ERROR: 'ide0: cifs-store:iso/I_DO_NOT_EXIST.iso': storage unavailable or file does not exist
+bootdisk: scsi0
+cores: 2
+ide0: cifs-store:iso/I_DO_NOT_EXIST.iso,media=cdrom,size=112M
+memory: 512
+net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
+ostype: l26
+scsi0: local:100/vm-100-disk-2.qcow2,size=10G
+scsihw: virtio-scsi-pci
+smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
+vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
diff --git a/test/cfg2cmd/ide-required-iso-missing.conf.cmd b/test/cfg2cmd/ide-required-iso-missing.conf.cmd
new file mode 100644
index 00000000..e69de29b
diff --git a/test/cfg2cmd/ide-required-iso-offline-nfs.conf b/test/cfg2cmd/ide-required-iso-offline-nfs.conf
new file mode 100644
index 00000000..a13831bf
--- /dev/null
+++ b/test/cfg2cmd/ide-required-iso-offline-nfs.conf
@@ -0,0 +1,12 @@
+# TEST: Config with default machine type, Linux & one IDE CD-ROM with required ISO file on offline storage.
+# EXPECT_ERROR: 'ide0: nfs-offline:iso/any.iso': storage unavailable or file does not exist
+bootdisk: scsi0
+cores: 2
+ide0: nfs-offline:iso/any.iso,media=cdrom,size=112M
+memory: 512
+net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
+ostype: l26
+scsi0: local:100/vm-100-disk-2.qcow2,size=10G
+scsihw: virtio-scsi-pci
+smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
+vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
diff --git a/test/cfg2cmd/ide-required-iso-offline-nfs.conf.cmd b/test/cfg2cmd/ide-required-iso-offline-nfs.conf.cmd
new file mode 100644
index 00000000..e69de29b
diff --git a/test/cfg2cmd/ide-required.conf b/test/cfg2cmd/ide-required.conf
new file mode 100644
index 00000000..54b3f8ee
--- /dev/null
+++ b/test/cfg2cmd/ide-required.conf
@@ -0,0 +1,14 @@
+# TEST: Config with default machine type, Linux & four IDE CD-ROMs marked as required
+bootdisk: scsi0
+cores: 2
+ide0: cifs-store:iso/zero.iso,media=cdrom,size=112M,essential=1
+ide1: cifs-store:iso/one.iso,media=cdrom,size=112M,essential=1
+ide2: cifs-store:iso/two.iso,media=cdrom,size=112M,essential=1
+ide3: cifs-store:iso/three.iso,media=cdrom,size=112M,essential=1
+memory: 512
+net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
+ostype: l26
+scsi0: local:100/vm-100-disk-2.qcow2,size=10G
+scsihw: virtio-scsi-pci
+smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
+vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
diff --git a/test/cfg2cmd/ide-required.conf.cmd b/test/cfg2cmd/ide-required.conf.cmd
new file mode 100644
index 00000000..33c6aadc
--- /dev/null
+++ b/test/cfg2cmd/ide-required.conf.cmd
@@ -0,0 +1,39 @@
+/usr/bin/kvm \
+ -id 8006 \
+ -name 'vm8006,debug-threads=on' \
+ -no-shutdown \
+ -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+ -mon 'chardev=qmp,mode=control' \
+ -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
+ -mon 'chardev=qmp-event,mode=control' \
+ -pidfile /var/run/qemu-server/8006.pid \
+ -daemonize \
+ -smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \
+ -smp '2,sockets=1,cores=2,maxcpus=2' \
+ -nodefaults \
+ -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+ -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+ -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
+ -m 512 \
+ -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
+ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
+ -device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \
+ -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
+ -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
+ -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
+ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
+ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+ -drive 'file=/mnt/pve/cifs-store/template/iso/zero.iso,if=none,id=drive-ide0,media=cdrom,format=raw,aio=threads' \
+ -device 'ide-cd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=200' \
+ -drive 'file=/mnt/pve/cifs-store/template/iso/one.iso,if=none,id=drive-ide1,media=cdrom,format=raw,aio=threads' \
+ -device 'ide-cd,bus=ide.0,unit=1,drive=drive-ide1,id=ide1,bootindex=201' \
+ -drive 'file=/mnt/pve/cifs-store/template/iso/two.iso,if=none,id=drive-ide2,media=cdrom,format=raw,aio=threads' \
+ -device 'ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=202' \
+ -drive 'file=/mnt/pve/cifs-store/template/iso/three.iso,if=none,id=drive-ide3,media=cdrom,format=raw,aio=threads' \
+ -device 'ide-cd,bus=ide.1,unit=1,drive=drive-ide3,id=ide3,bootindex=203' \
+ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+ -drive 'file=/var/lib/vz/images/100/vm-100-disk-2.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' \
+ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
+ -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
+ -machine 'type=pc+pve0'
diff --git a/test/cfg2cmd/ide-unrequired-iso-missing.conf b/test/cfg2cmd/ide-unrequired-iso-missing.conf
new file mode 100644
index 00000000..0bff998e
--- /dev/null
+++ b/test/cfg2cmd/ide-unrequired-iso-missing.conf
@@ -0,0 +1,12 @@
+# TEST: Config with default machine type, Linux & and one IDE CD-ROM with online storage and missing unrequired ISO file.
+# EXPECT_WARN: eject 'ide0: cifs-store:iso/I_DO_NOT_EXIST.iso': storage unavailable or file does not exist
+bootdisk: scsi0
+cores: 2
+ide0: cifs-store:iso/I_DO_NOT_EXIST.iso,media=cdrom,size=112M,essential=0
+memory: 512
+net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
+ostype: l26
+scsi0: local:100/vm-100-disk-2.qcow2,size=10G
+scsihw: virtio-scsi-pci
+smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
+vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
diff --git a/test/cfg2cmd/ide-unrequired-iso-missing.conf.cmd b/test/cfg2cmd/ide-unrequired-iso-missing.conf.cmd
new file mode 100644
index 00000000..e6efd8a9
--- /dev/null
+++ b/test/cfg2cmd/ide-unrequired-iso-missing.conf.cmd
@@ -0,0 +1,33 @@
+/usr/bin/kvm \
+ -id 8006 \
+ -name 'vm8006,debug-threads=on' \
+ -no-shutdown \
+ -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+ -mon 'chardev=qmp,mode=control' \
+ -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
+ -mon 'chardev=qmp-event,mode=control' \
+ -pidfile /var/run/qemu-server/8006.pid \
+ -daemonize \
+ -smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \
+ -smp '2,sockets=1,cores=2,maxcpus=2' \
+ -nodefaults \
+ -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+ -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+ -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
+ -m 512 \
+ -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
+ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
+ -device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \
+ -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
+ -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
+ -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
+ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
+ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+ -drive 'if=none,id=drive-ide0,media=cdrom,aio=io_uring' \
+ -device 'ide-cd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=200' \
+ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+ -drive 'file=/var/lib/vz/images/100/vm-100-disk-2.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' \
+ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
+ -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
+ -machine 'type=pc+pve0'
diff --git a/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf b/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf
new file mode 100644
index 00000000..9a87e8a5
--- /dev/null
+++ b/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf
@@ -0,0 +1,12 @@
+# TEST: Config with default machine type, Linux & and one IDE CD-ROM with unrequired ISO file on offline storage.
+# EXPECT_WARN: eject 'ide0: nfs-offline:iso/any.iso': storage unavailable or file does not exist
+bootdisk: scsi0
+cores: 2
+ide0: nfs-offline:iso/any.iso,media=cdrom,size=112M,essential=0
+memory: 512
+net0: virtio=2E:01:68:F9:9C:87,bridge=vmbr0
+ostype: l26
+scsi0: local:100/vm-100-disk-2.qcow2,size=10G
+scsihw: virtio-scsi-pci
+smbios1: uuid=3dd750ce-d910-44d0-9493-525c0be4e687
+vmgenid: 54d1c06c-8f5b-440f-b5b2-6eab1380e13d
diff --git a/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf.cmd b/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf.cmd
new file mode 100644
index 00000000..e6efd8a9
--- /dev/null
+++ b/test/cfg2cmd/ide-unrequired-iso-offline-nfs.conf.cmd
@@ -0,0 +1,33 @@
+/usr/bin/kvm \
+ -id 8006 \
+ -name 'vm8006,debug-threads=on' \
+ -no-shutdown \
+ -chardev 'socket,id=qmp,path=/var/run/qemu-server/8006.qmp,server=on,wait=off' \
+ -mon 'chardev=qmp,mode=control' \
+ -chardev 'socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5' \
+ -mon 'chardev=qmp-event,mode=control' \
+ -pidfile /var/run/qemu-server/8006.pid \
+ -daemonize \
+ -smbios 'type=1,uuid=3dd750ce-d910-44d0-9493-525c0be4e687' \
+ -smp '2,sockets=1,cores=2,maxcpus=2' \
+ -nodefaults \
+ -boot 'menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg' \
+ -vnc 'unix:/var/run/qemu-server/8006.vnc,password=on' \
+ -cpu kvm64,enforce,+kvm_pv_eoi,+kvm_pv_unhalt,+lahf_lm,+sep \
+ -m 512 \
+ -device 'pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e' \
+ -device 'pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f' \
+ -device 'vmgenid,guid=54d1c06c-8f5b-440f-b5b2-6eab1380e13d' \
+ -device 'piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2' \
+ -device 'usb-tablet,id=tablet,bus=uhci.0,port=1' \
+ -device 'VGA,id=vga,bus=pci.0,addr=0x2' \
+ -device 'virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3,free-page-reporting=on' \
+ -iscsi 'initiator-name=iqn.1993-08.org.debian:01:aabbccddeeff' \
+ -drive 'if=none,id=drive-ide0,media=cdrom,aio=io_uring' \
+ -device 'ide-cd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=200' \
+ -device 'virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5' \
+ -drive 'file=/var/lib/vz/images/100/vm-100-disk-2.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=io_uring,detect-zeroes=on' \
+ -device 'scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100' \
+ -netdev 'type=tap,id=net0,ifname=tap8006i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on' \
+ -device 'virtio-net-pci,mac=2E:01:68:F9:9C:87,netdev=net0,bus=pci.0,addr=0x12,id=net0,rx_queue_size=1024,tx_queue_size=256,bootindex=300' \
+ -machine 'type=pc+pve0'
diff --git a/test/run_config2command_tests.pl b/test/run_config2command_tests.pl
index 2feebd4a..170f20c6 100755
--- a/test/run_config2command_tests.pl
+++ b/test/run_config2command_tests.pl
@@ -50,6 +50,15 @@ my $base_env = {
iso => 1,
},
},
+ 'nfs-offline' => {
+ type => 'nfs',
+ export => '/srv/nfs/isos',
+ path => '/mnt/pve/nfs-offline',
+ server => '127.0.0.42',
+ content => {
+ iso => 1,
+ },
+ },
'rbd-store' => {
monhost => '127.0.0.42,127.0.0.21,::1',
fsid => 'fc4181a6-56eb-4f68-b452-8ba1f381ca2a',
@@ -201,6 +210,14 @@ $qemu_server_module->mock(
cleanup_pci_devices => {
# do nothing
},
+ file_exists => sub {
+ my $file_path = shift;
+ return 1 if !($file_path =~ m|I_DO_NOT_EXIST|);
+ },
+ log_warn => sub {
+ my $logwarn = shift;
+ return warn("${logwarn}\n");
+ },
);
my $qemu_server_config;
@@ -393,6 +410,25 @@ $pci_module->mock(
}
);
+my $pve_storage_plugin_module = Test::MockModule->new("PVE::Storage::Plugin");
+$pve_storage_plugin_module->mock(
+ activate_storage => sub {
+ return 1;
+ },
+);
+
+my $pve_storage_cifsplugin_module = Test::MockModule->new("PVE::Storage::CIFSPlugin");
+$pve_storage_cifsplugin_module->mock(
+ check_connection => sub {
+ return 1;
+ },
+ cifs_is_mounted => sub {
+ my ($scfg, $mountdata) = @_;
+ my ($mountpoint, $server, $share) = $scfg->@{'path', 'server', 'share'};
+ return $mountpoint;
+ },
+);
+
sub diff($$) {
my ($a, $b) = @_;
return if $a eq $b;
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH pve-manager v3 4/6] fix #4225: ui: form: isoselector: add checkbox for 'essential' param
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
` (2 preceding siblings ...)
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 5/6] fix #4225: ui: qemu: cdedit: enable 'Essential' checkbox for isos Daniel Herzig
` (2 subsequent siblings)
6 siblings, 0 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
Add a checkbox for marking an iso file as required for booting via the
'essential' drive parameter.
This option is used in the backend to determine if the VM should start
up in case the configured ISO file is not available.
By default this box is not visible and disabled.
Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
www/manager6/form/IsoSelector.js | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js
index 66229e88..425b1792 100644
--- a/www/manager6/form/IsoSelector.js
+++ b/www/manager6/form/IsoSelector.js
@@ -15,12 +15,14 @@ Ext.define('PVE.form.IsoSelector', {
insideWizard: false,
labelWidth: undefined,
labelAlign: 'right',
+ showRequired: false,
cbindData: function() {
let me = this;
return {
nodename: me.nodename,
insideWizard: me.insideWizard,
+ showRequired: me.showRequired,
};
},
@@ -113,5 +115,25 @@ Ext.define('PVE.form.IsoSelector', {
},
},
},
+ {
+ xtype: 'proxmoxcheckbox',
+ fieldLabel: gettext('Essential'),
+ name: 'essential',
+ reference: 'requiredForBoot',
+ value: 1,
+ cbind: {
+ nodename: '{nodename}',
+ disabled: '{!showRequired}',
+ hidden: '{!showRequired}',
+ labelWidth: '{labelWidth}',
+ labelAlign: '{labelAlign}',
+ },
+ allowBlank: false,
+ listeners: {
+ change: function() {
+ this.up('pveIsoSelector').checkChange();
+ },
+ },
+ },
],
});
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH pve-manager v3 5/6] fix #4225: ui: qemu: cdedit: enable 'Essential' checkbox for isos
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
` (3 preceding siblings ...)
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 4/6] fix #4225: ui: form: isoselector: add checkbox for 'essential' param Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 6/6] fix #4225: ui: qemu: hardware: add eject button for cdroms Daniel Herzig
2025-01-31 9:36 ` [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Fiona Ebner
6 siblings, 0 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
Enables the 'Essential' checkbox for the IsoSelector.
If the parameter `essential` is not set in the configuration,
it will be assumed to be true, to avoid breaking changes.
The box is checked by default for the same reason.
If unchecked, `essential=0` is written to the configuration and the VM
will attempt to start, even if the file or underlying storage is not
available (by temporarily setting the value to 'none,media=cdrom').
Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
www/manager6/qemu/CDEdit.js | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js
index 3cc16205..b115debc 100644
--- a/www/manager6/qemu/CDEdit.js
+++ b/www/manager6/qemu/CDEdit.js
@@ -12,6 +12,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
me.drive.media = 'cdrom';
if (values.mediaType === 'iso') {
me.drive.file = values.cdimage;
+ me.drive.essential = values.essential ? undefined : '0';
} else if (values.mediaType === 'cdrom') {
me.drive.file = 'cdrom';
} else {
@@ -44,6 +45,11 @@ Ext.define('PVE.qemu.CDInputPanel', {
} else {
values.mediaType = 'iso';
values.cdimage = drive.file;
+ if (drive.essential === '1' || drive.essential === undefined) {
+ values.essential = '1';
+ } else {
+ values.essential = '0';
+ }
}
me.drive = drive;
@@ -88,6 +94,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
cdImageField.validate();
} else {
cdImageField.reset();
+ delete me.drive.essential;
}
},
},
@@ -98,6 +105,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
nodename: me.nodename,
insideWizard: me.insideWizard,
name: 'cdimage',
+ showRequired: true,
});
items.push(me.isosel);
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* [pve-devel] [PATCH pve-manager v3 6/6] fix #4225: ui: qemu: hardware: add eject button for cdroms
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
` (4 preceding siblings ...)
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 5/6] fix #4225: ui: qemu: cdedit: enable 'Essential' checkbox for isos Daniel Herzig
@ 2025-01-30 11:31 ` Daniel Herzig
2025-01-31 9:36 ` [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Fiona Ebner
6 siblings, 0 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-30 11:31 UTC (permalink / raw)
To: pve-devel
This commit adds a button in the hardware view for quickly ejecting
unnecessary cdroms or ISO files by setting file to 'none'.
Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
---
www/manager6/qemu/HardwareView.js | 42 +++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index c6d193fc..d8a9e187 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -541,6 +541,44 @@ Ext.define('PVE.qemu.HardwareView', {
apiurl: '/api2/extjs/' + baseurl,
});
+ let eject_btn = new Proxmox.button.Button({
+ text: gettext('Eject'),
+ disabled: true,
+ selModel: sm,
+ RESTMethod: 'POST',
+ confirmMsg: function(rec) {
+ let confirmMessage = gettext("Are you sure you want to eject '{0}' ?");
+ let isoFile = PVE.Parser.parsePropertyString(rec.data.value, 'volid').volid;
+ return Ext.htmlEncode(Ext.String.format(confirmMessage, isoFile));
+ },
+ handler: function(btn, e, rec) {
+ let params = {};
+ params[rec.data.key] = 'none,media=cdrom';
+ if (btn.RESTMethod === 'POST') {
+ params.background_delay = 5;
+ }
+ Proxmox.Utils.API2Request({
+ url: '/api2/extjs/' + baseurl,
+ waitMsgTarget: me,
+ method: btn.RESTMethod,
+ params: params,
+ callback: () => me.reload(),
+ failure: response => Ext.Msg.alert('Error', response.htmlStatus),
+ success: function(response, options) {
+ if (btn.RESTMethod === 'POST' && response.result.data !== null) {
+ Ext.create('Proxmox.window.TaskProgress', {
+ autoShow: true,
+ upid: response.result.data,
+ listeners: {
+ destroy: () => me.reload(),
+ },
+ });
+ }
+ },
+ });
+ },
+ });
+
let efidisk_menuitem = Ext.create('Ext.menu.Item', {
text: gettext('EFI Disk'),
iconCls: 'fa fa-fw fa-hdd-o black',
@@ -611,6 +649,7 @@ Ext.define('PVE.qemu.HardwareView', {
edit_btn.disable();
diskaction_btn.disable();
revert_btn.disable();
+ eject_btn.disable();
return;
}
const { key, value } = rec.data;
@@ -622,6 +661,7 @@ Ext.define('PVE.qemu.HardwareView', {
const isCloudInit = isCloudInitKey(value);
const isCDRom = value && !!value.toString().match(/media=cdrom/);
+ const isEjectedCDRom = value && !!value.toString().match(/none,media=cdrom/);
const isUnusedDisk = key.match(/^unused\d+/);
const isUsedDisk = !isUnusedDisk && row.isOnStorageBus && !isCDRom;
@@ -651,6 +691,7 @@ Ext.define('PVE.qemu.HardwareView', {
resize_menuitem.setDisabled(pending || !isUsedDisk);
revert_btn.setDisabled(!pending);
+ eject_btn.setDisabled(!cdromCap || !isCDRom || isCloudInit || isEjectedCDRom);
};
let editorFactory = (classPath, extraOptions) => {
@@ -754,6 +795,7 @@ Ext.define('PVE.qemu.HardwareView', {
remove_btn,
edit_btn,
diskaction_btn,
+ eject_btn,
revert_btn,
],
rows: rows,
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place Daniel Herzig
@ 2025-01-31 9:36 ` Fiona Ebner
0 siblings, 0 replies; 19+ messages in thread
From: Fiona Ebner @ 2025-01-31 9:36 UTC (permalink / raw)
To: Proxmox VE development discussion, Daniel Herzig
Am 30.01.25 um 12:31 schrieb Daniel Herzig:
> @@ -393,6 +410,25 @@ $pci_module->mock(
> }
> );
>
> +my $pve_storage_plugin_module = Test::MockModule->new("PVE::Storage::Plugin");
> +$pve_storage_plugin_module->mock(
> + activate_storage => sub {
> + return 1;
> + },
> +);
> +
> +my $pve_storage_cifsplugin_module = Test::MockModule->new("PVE::Storage::CIFSPlugin");
> +$pve_storage_cifsplugin_module->mock(
> + check_connection => sub {
> + return 1;
> + },
> + cifs_is_mounted => sub {
> + my ($scfg, $mountdata) = @_;
> + my ($mountpoint, $server, $share) = $scfg->@{'path', 'server', 'share'};
> + return $mountpoint;
> + },
> +);
> +
Can't we avoid mocking PVE::Storage::Plugin and
PVE::Storage::CIFSPlugin? It should be enough to just mock the top-level
storage API from PVE::Storage. Ideally, the qemu-server package should
not have any idea how the storage package works internally. You can add
conditionals for the storage IDs if you need specific behavior for
certain storages.
> sub diff($$) {
> my ($a, $b) = @_;
> return if $a eq $b;
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos Daniel Herzig
@ 2025-01-31 9:36 ` Fiona Ebner
2025-01-31 9:52 ` Fiona Ebner
0 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-01-31 9:36 UTC (permalink / raw)
To: Proxmox VE development discussion, Daniel Herzig
Am 30.01.25 um 12:31 schrieb Daniel Herzig:
> The function `eject_nonrequired_isos` checks on whether a cdrom drive is
> marked as required for booting the VM or not. If the parameter `essential` is not
> defined, it will assume `essential` to be true and keep the current
> behaviour.
>
> If `required` is set to 0, the function 'ejects' the ISO file by
> setting the drive's file value to 'none', if the underlying storage is
> unavailable or if the defined file is unavailable for another reason.
>
> The function is meant to be called from `config_to_command` while it
> iterates over all volumes to allow for early storage activation and
> early exit in the case of missing required files or unavailable
> network storages.
>
> This commit also adds a small helper sub `file_exists` to facilitate
> mocking of file existence, which is needed for testing
> `eject_nonrequired_isos` once in place.
> ---
> PVE/QemuServer.pm | 35 +++++++++++++++++++++++++++++++++++
> 1 file changed, 35 insertions(+)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 808c0e1c..d151c322 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -8797,4 +8797,39 @@ sub delete_ifaces_ipams_ips {
> }
> }
>
> +sub eject_nonrequired_isos {
> + my ($ds, $drive, $vmid, $storecfg, $conf) = @_;
> +
> + # exclude cloudinit drives from processing (parameter '1')
> + return if ( !drive_is_cdrom($drive, 1) ||
> + $drive->{file} eq 'none' ||
> + $drive->{file} eq 'cdrom' );
Style nit: post-ifs should not be multiline, post-ifs don't use
additional parentheses:
https://pve.proxmox.com/wiki/Perl_Style_Guide#Wrapping_Post-If
> +
> + $drive->{essential} = 1 if !defined($drive->{essential});
This should rather be done when parsing the drive.
> + my $iso_volid = $drive->{file};
Nit: variable could be moved up so that the previous check can already
use it
> + my $iso_path = PVE::QemuServer::Drive::get_iso_path($storecfg, $vmid, $iso_volid);
> + my $store_err;
> + if ($iso_volid !~ m|^/|) {
> + my $iso_storage = PVE::Storage::parse_volume_id($iso_volid, 1);
> + eval { PVE::Storage::activate_storage($storecfg, $iso_storage); };
> + $store_err = $@;
I'd issue a warning here if there was a failure to activate.
> + }
> +
> + return if ( !$store_err &&
> + file_exists($iso_path) );
> +
> + if ($drive->{essential}) {
> + die "'${ds}: ${iso_volid}': storage unavailable or file does not exist\n";
> + } else {
> + log_warn("eject '${ds}: ${iso_volid}': storage unavailable or file does not exist");
Technically, this does not eject anything, just changes the configuration.
> + $drive->{file} = 'none';
> + $conf->{$ds} = print_drive($drive);
Should we also make sure to write out the modified config? Especially
for live-migration it's important to stay in-sync and so the migration
target should not suddenly have a CD-ROM again if it became accessible
again. Writing the config can also be done by the caller of course if it
better fits there.
> + }
> +}
> +
> +sub file_exists {
> + my $file_path = shift;
> + return -e $file_path
This will only work for file-based storages. The PVE::Storage::path()
function can also return a protocol-based path like "glusterfs://xyz"
which will not work for "-e" checks. (Our glusterfs plugin does so only
for content type "images", but nothing requires a "media=cdrom" drive to
be of content type "iso" right now, and I'm making a general point here,
there are third-party plugins too). So to cleanly solve this, it will be
required to either use e.g. "qemu-img info" as a proxy for existence
checking, which is often done in our code via volume_size_info() (or
alternatively to add a dedicated storage+plugin API function to check
for the existence of an image).
> +}
> +
> 1;
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required Daniel Herzig
@ 2025-01-31 9:36 ` Fiona Ebner
2025-01-31 11:09 ` Daniel Herzig
0 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-01-31 9:36 UTC (permalink / raw)
To: Proxmox VE development discussion, Daniel Herzig
The 'qemuserver' prefix in the commit title doesn't add any information
and should not be there. Commit title prefixes are not for file names.
This also doesn't fix the issue yet, so I'd also drop that prefix too.
Am 30.01.25 um 12:31 schrieb Daniel Herzig:
> This commit add the parameter `essential` to mark a drive as required
> for booting the VM.
>
> Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
> ---
> PVE/QemuServer/Drive.pm | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/PVE/QemuServer/Drive.pm b/PVE/QemuServer/Drive.pm
> index 1041c1dd..38136787 100644
> --- a/PVE/QemuServer/Drive.pm
> +++ b/PVE/QemuServer/Drive.pm
> @@ -266,7 +266,14 @@ my %drivedesc_base = (
> verbose_description => "Mark this locally-managed volume as available on all nodes.\n\nWARNING: This option does not share the volume automatically, it assumes it is shared already!",
> optional => 1,
> default => 0,
> - }
> + },
> + essential => {
> + type => 'boolean',
> + description => 'Mark this iso volume as required for booting the VM.',
Nit: Since the 'media=cdrom' option is used to decide this, I'd state
"CD-ROM" here to be more precise. I'd also say "for starting the VM"
rather than "for booting the VM". The device isn't necessarily involved
into booting, but can still be considered essential to allow starting
the VM.
> + verbose_description => 'If unset or set to 1, and the iso file is unavailable, the VM will not start.\nThis parameter is considered for cdrom iso drives only.',
> + optional => 1,
> + default => 1,
> + },
> );
>
> my %iothread_fmt = ( iothread => {
There should be some checking/handling in the API endpoints and/or
parse_drive() for making sure this can only be set in combination with
'media=cdrom'. There are already such checks in parse_drive() which will
return undef in those cases, but please also issue a warning for a new
such check so that it will be clear what went wrong ;)
Nit: Usually, it's nicer to have booleans be 0 if not present. So can we
invert this e.g. "ignore-if-missing" (or "detach-if-missing" or
"eject-if-missing")? Otherwise, maybe "essential-for-start" to be more
descriptive?
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
` (5 preceding siblings ...)
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 6/6] fix #4225: ui: qemu: hardware: add eject button for cdroms Daniel Herzig
@ 2025-01-31 9:36 ` Fiona Ebner
2025-01-31 10:38 ` Daniel Herzig
6 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-01-31 9:36 UTC (permalink / raw)
To: Proxmox VE development discussion, Daniel Herzig
Am 30.01.25 um 12:31 schrieb Daniel Herzig:
> This patch series addresses bugzilla entry #4225.
>
> Currently VMs refuse to to start if a configured isofile becomes unavailable,
> be it a deleted file or an unavailable network storage.
>
> This patch series introduces a new parameter in Drive.pm, called 'essential'.
> Depending on whether this parameter is set or not, the situation will be handled
> differently.
>
> If the parameter is set to 0, the configuration will temporarily changed to use
> 'none' as file for the cd drive, which allows qemu to start up the machine.
> The configuration is not changed in this process to avoid unexpected behaviour.
> Instead a log_warn will be issued.
>
> For transition reasons an unset parameter acts like 'required=1'. In this case
> the startup process will die earlier than currently, if the file is missing or
> the underlying storage not available.
Since you use the word "transition", is there a plan to change the
default behavior at some point? IMHO that requires more rationale
(especially in the backend).
>
> If a new VM is created from the WebGUI, a corresponding added checkbox
> is checked by default, but allows for convenient unchecking during setup time,
> eg for media that is only needed for installation time.
>
> This patch series adds an 'Eject' button to the hardwareview in the WebGUI,
> which can be used as a convenience shortcut to setting file to 'none' for the
> cdrom drive.
>
> This series supersedes:
> https://lore.proxmox.com/pve-devel/20250113085608.99498-1-d.herzig@proxmox.com/
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-01-31 9:36 ` Fiona Ebner
@ 2025-01-31 9:52 ` Fiona Ebner
2025-01-31 13:58 ` Daniel Herzig
0 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-01-31 9:52 UTC (permalink / raw)
To: Proxmox VE development discussion, Daniel Herzig
Am 31.01.25 um 10:36 schrieb Fiona Ebner:
> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>> +
>> + $drive->{essential} = 1 if !defined($drive->{essential});
>
> This should rather be done when parsing the drive.
Or I guess to avoid (potentially) writing it out for every drive, it
should only be a local variable here and not set in the drive hash.
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs
2025-01-31 9:36 ` [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Fiona Ebner
@ 2025-01-31 10:38 ` Daniel Herzig
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-31 10:38 UTC (permalink / raw)
To: Fiona Ebner; +Cc: Proxmox VE development discussion
Fiona Ebner <f.ebner@proxmox.com> writes:
> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>> This patch series addresses bugzilla entry #4225.
>>
>> Currently VMs refuse to to start if a configured isofile becomes unavailable,
>> be it a deleted file or an unavailable network storage.
>>
>> This patch series introduces a new parameter in Drive.pm, called 'essential'.
>> Depending on whether this parameter is set or not, the situation will be handled
>> differently.
>>
>> If the parameter is set to 0, the configuration will temporarily changed to use
>> 'none' as file for the cd drive, which allows qemu to start up the machine.
>> The configuration is not changed in this process to avoid unexpected behaviour.
>> Instead a log_warn will be issued.
>>
>> For transition reasons an unset parameter acts like 'required=1'. In this case
>> the startup process will die earlier than currently, if the file is missing or
>> the underlying storage not available.
>
> Since you use the word "transition", is there a plan to change the
> default behavior at some point? IMHO that requires more rationale
> (especially in the backend).
>
I just used this phrasing to underline that the option 'essential', if pro-actively
set to 0, will change current behaviour. Without intervention, people should not
notice any difference to current behaviour with the changes from these
patches. Except the startup error additionaly listing the file, that's
triggering the contact to a non-available network share.
I might have a slight preference to not see ISOs as essential files
after a successful installation indeed, but there certainly are
setups, where it does not make sense to attempt starting up a machine
(or let the attempt fail) without an available ISO attached to the
VM. I'm eg thinking about ephemeral VMs running from live-ISOs or the like.
>>
>> If a new VM is created from the WebGUI, a corresponding added checkbox
>> is checked by default, but allows for convenient unchecking during setup time,
>> eg for media that is only needed for installation time.
>>
>> This patch series adds an 'Eject' button to the hardwareview in the WebGUI,
>> which can be used as a convenience shortcut to setting file to 'none' for the
>> cdrom drive.
>>
>> This series supersedes:
>> https://lore.proxmox.com/pve-devel/20250113085608.99498-1-d.herzig@proxmox.com/
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required
2025-01-31 9:36 ` Fiona Ebner
@ 2025-01-31 11:09 ` Daniel Herzig
0 siblings, 0 replies; 19+ messages in thread
From: Daniel Herzig @ 2025-01-31 11:09 UTC (permalink / raw)
To: Fiona Ebner; +Cc: Proxmox VE development discussion
Fiona Ebner <f.ebner@proxmox.com> writes:
> The 'qemuserver' prefix in the commit title doesn't add any information
> and should not be there. Commit title prefixes are not for file names.
> This also doesn't fix the issue yet, so I'd also drop that prefix too.
>
Right, missed that redundancy. Will be fixed in some v4.
> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>> This commit add the parameter `essential` to mark a drive as required
>> for booting the VM.
>>
>> Signed-off-by: Daniel Herzig <d.herzig@proxmox.com>
>> ---
>> PVE/QemuServer/Drive.pm | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/PVE/QemuServer/Drive.pm b/PVE/QemuServer/Drive.pm
>> index 1041c1dd..38136787 100644
>> --- a/PVE/QemuServer/Drive.pm
>> +++ b/PVE/QemuServer/Drive.pm
>> @@ -266,7 +266,14 @@ my %drivedesc_base = (
>> verbose_description => "Mark this locally-managed volume as available on all nodes.\n\nWARNING: This option does not share the volume automatically, it assumes it is shared already!",
>> optional => 1,
>> default => 0,
>> - }
>> + },
>> + essential => {
>> + type => 'boolean',
>> + description => 'Mark this iso volume as required for booting the VM.',
>
> Nit: Since the 'media=cdrom' option is used to decide this, I'd state
> "CD-ROM" here to be more precise. I'd also say "for starting the VM"
> rather than "for booting the VM". The device isn't necessarily involved
> into booting, but can still be considered essential to allow starting
> the VM.
Thanks for pointing this out, this part needs some re-working indeed.
>
>> + verbose_description => 'If unset or set to 1, and the iso file is unavailable, the VM will not start.\nThis parameter is considered for cdrom iso drives only.',
>> + optional => 1,
>> + default => 1,
>> + },
>> );
>>
>> my %iothread_fmt = ( iothread => {
>
> There should be some checking/handling in the API endpoints and/or
> parse_drive() for making sure this can only be set in combination with
> 'media=cdrom'. There are already such checks in parse_drive() which will
> return undef in those cases, but please also issue a warning for a new
> such check so that it will be clear what went wrong ;)
>
I'll look this up and check against various ~qm set~ scenarios.
> Nit: Usually, it's nicer to have booleans be 0 if not present. So can we
> invert this e.g. "ignore-if-missing" (or "detach-if-missing" or
> "eject-if-missing")? Otherwise, maybe "essential-for-start" to be more
> descriptive?
Good idea, getting ready to invert my brains :)
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-01-31 9:52 ` Fiona Ebner
@ 2025-01-31 13:58 ` Daniel Herzig
2025-02-03 9:00 ` Fiona Ebner
0 siblings, 1 reply; 19+ messages in thread
From: Daniel Herzig @ 2025-01-31 13:58 UTC (permalink / raw)
To: Fiona Ebner; +Cc: Proxmox VE development discussion
Fiona Ebner <f.ebner@proxmox.com> writes:
> Am 31.01.25 um 10:36 schrieb Fiona Ebner:
>> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>>> +
>>> + $drive->{essential} = 1 if !defined($drive->{essential});
>>
>> This should rather be done when parsing the drive.
>
> Or I guess to avoid (potentially) writing it out for every drive, it
> should only be a local variable here and not set in the drive hash.
Thanks, I'll double check on this for v4. But I'd assume the hash to be scoped to
`config_to_command` here, or am I missing something?
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-01-31 13:58 ` Daniel Herzig
@ 2025-02-03 9:00 ` Fiona Ebner
2025-02-03 10:15 ` Daniel Herzig
0 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-02-03 9:00 UTC (permalink / raw)
To: Daniel Herzig; +Cc: Proxmox VE development discussion
Am 31.01.25 um 14:58 schrieb Daniel Herzig:
> Fiona Ebner <f.ebner@proxmox.com> writes:
>
>> Am 31.01.25 um 10:36 schrieb Fiona Ebner:
>>> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>>>> +
>>>> + $drive->{essential} = 1 if !defined($drive->{essential});
>>>
>>> This should rather be done when parsing the drive.
>>
>> Or I guess to avoid (potentially) writing it out for every drive, it
>> should only be a local variable here and not set in the drive hash.
>
> Thanks, I'll double check on this for v4. But I'd assume the hash to be scoped to
> `config_to_command` here, or am I missing something?
>
But you don't need the modified version in config_to_command() later,
or? And if yes, that can just check the same way again, i.e. using
default value if not set. If we want to explicitly set the value, that
should happen during parsing the drive string. Most of the time it's
surprising to implicitly modify a passed-in value. Better to either
avoid that or if really necessary, explicitly mention it in the function
description.
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-02-03 9:00 ` Fiona Ebner
@ 2025-02-03 10:15 ` Daniel Herzig
2025-02-03 13:09 ` Fiona Ebner
0 siblings, 1 reply; 19+ messages in thread
From: Daniel Herzig @ 2025-02-03 10:15 UTC (permalink / raw)
To: Fiona Ebner; +Cc: Proxmox VE development discussion
Fiona Ebner <f.ebner@proxmox.com> writes:
> Am 31.01.25 um 14:58 schrieb Daniel Herzig:
>> Fiona Ebner <f.ebner@proxmox.com> writes:
>>
>>> Am 31.01.25 um 10:36 schrieb Fiona Ebner:
>>>> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>>>>> +
>>>>> + $drive->{essential} = 1 if !defined($drive->{essential});
>>>>
>>>> This should rather be done when parsing the drive.
>>>
>>> Or I guess to avoid (potentially) writing it out for every drive, it
>>> should only be a local variable here and not set in the drive hash.
>>
>> Thanks, I'll double check on this for v4. But I'd assume the hash to be scoped to
>> `config_to_command` here, or am I missing something?
>>
>
> But you don't need the modified version in config_to_command() later,
> or? And if yes, that can just check the same way again, i.e. using
> default value if not set. If we want to explicitly set the value, that
> should happen during parsing the drive string. Most of the time it's
> surprising to implicitly modify a passed-in value. Better to either
> avoid that or if really necessary, explicitly mention it in the function
> description.
No, I do not need the modified version of the VM-config later.
What I'm trying to achieve is a more 'forgiving' behaviour in the case
of accidently server-side-deleted iso file/unavailable server (for whatever reason)
attached to a VM. So this is actually aiming at `qm start`, which
implicitly calls `config_to_command` -- without modifying the existing
VM config at all.
If the parameter 'essential' is set to '0', `config_to_command` would --
in case of file unavailability of the iso file -- generate a kvm startup
command that contains "-drive 'if=none,media=cdrom,[...]" instead of
"-drive 'file=$SOME_PATH_TO_ISO,[..]' when we at this point already know
that $SOME_PATH_TO_ISO is unavailable/non-existent.
The VM-config itself is not changed, as an eg nfs-server might come back
at a point in time later and the user might want to do something with the iso
stored there.
If the parameter 'essential' is unset, or set to '1', the die would
happen before `qm start` leads to an invocation of kvm, as it cannot be
expected to lead to a successful action, if $SOME_PATH_TO_ISO is not
reachable. This would be the exact behaviour as we have it now, just not
letting kvm run into this situation, but detect and exit earlier, while
`config_to_commands` iterates over all volumes via `foreach_volume`
anyway before producing the 'final' kvm command.
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-02-03 10:15 ` Daniel Herzig
@ 2025-02-03 13:09 ` Fiona Ebner
2025-02-03 13:12 ` Fiona Ebner
0 siblings, 1 reply; 19+ messages in thread
From: Fiona Ebner @ 2025-02-03 13:09 UTC (permalink / raw)
To: Daniel Herzig; +Cc: Proxmox VE development discussion
Am 03.02.25 um 11:15 schrieb Daniel Herzig:
> Fiona Ebner <f.ebner@proxmox.com> writes:
>
>> Am 31.01.25 um 14:58 schrieb Daniel Herzig:
>>> Fiona Ebner <f.ebner@proxmox.com> writes:
>>>
>>>> Am 31.01.25 um 10:36 schrieb Fiona Ebner:
>>>>> Am 30.01.25 um 12:31 schrieb Daniel Herzig:
>>>>>> +
>>>>>> + $drive->{essential} = 1 if !defined($drive->{essential});
>>>>>
>>>>> This should rather be done when parsing the drive.
>>>>
>>>> Or I guess to avoid (potentially) writing it out for every drive, it
>>>> should only be a local variable here and not set in the drive hash.
>>>
>>> Thanks, I'll double check on this for v4. But I'd assume the hash to be scoped to
>>> `config_to_command` here, or am I missing something?
>>>
>>
>> But you don't need the modified version in config_to_command() later,
>> or? And if yes, that can just check the same way again, i.e. using
>> default value if not set. If we want to explicitly set the value, that
>> should happen during parsing the drive string. Most of the time it's
>> surprising to implicitly modify a passed-in value. Better to either
>> avoid that or if really necessary, explicitly mention it in the function
>> description.
>
> No, I do not need the modified version of the VM-config later.
Yes, but you manipulate the drive hash, which would then get written out
modified. Maybe you are lucky and there is no writer, but I'm telling
you how to avoid that by considering the default on access. E.g. see how
this is done for the 'bios' option, we do not modify the setting but
apply the default when accessing it.
>
> What I'm trying to achieve is a more 'forgiving' behaviour in the case
> of accidently server-side-deleted iso file/unavailable server (for whatever reason)
> attached to a VM. So this is actually aiming at `qm start`, which
> implicitly calls `config_to_command` -- without modifying the existing
> VM config at all.
>
> If the parameter 'essential' is set to '0', `config_to_command` would --
> in case of file unavailability of the iso file -- generate a kvm startup
> command that contains "-drive 'if=none,media=cdrom,[...]" instead of
> "-drive 'file=$SOME_PATH_TO_ISO,[..]' when we at this point already know
> that $SOME_PATH_TO_ISO is unavailable/non-existent.
Yes, I understand that.
>
> The VM-config itself is not changed, as an eg nfs-server might come back
> at a point in time later and the user might want to do something with the iso
> stored there.
This is problematic for live migration, see my initial reply. Either we
need to drop the CD from the config or we need another option "missing"
that gets set if it is missing during start-up (and cleared if it is
there during startup). Then the target of migration can also know about
it when starting its own instance of the VM. We could also do this via a
special section in the configuration, see the following series[0] since
this would be internal-only information.
>
> If the parameter 'essential' is unset, or set to '1', the die would
> happen before `qm start` leads to an invocation of kvm, as it cannot be
> expected to lead to a successful action, if $SOME_PATH_TO_ISO is not
> reachable. This would be the exact behaviour as we have it now, just not
> letting kvm run into this situation, but detect and exit earlier, while
> `config_to_commands` iterates over all volumes via `foreach_volume`
> anyway before producing the 'final' kvm command.
>
Right, you also modify the config itself. But you cannot rely on nobody
else later writing the config. Just because it doesn't happen right now
in the tested code paths, it doesn't mean it never will. (There can be
safe-guards [1] if we really want to ensure this). But I'd either simply
have the function return which devices should not be added later, or
explicitly write out the modified config.
Because doing config modifications implicitly is error prone and future
changes can easily activate bugs lurking in that implicit behavior.
[0]:
https://lore.proxmox.com/pve-devel/20250127112923.31703-10-f.ebner@proxmox.com/
[1]:
https://lore.proxmox.com/pve-devel/20250124105351.43428-3-f.ebner@proxmox.com/
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos
2025-02-03 13:09 ` Fiona Ebner
@ 2025-02-03 13:12 ` Fiona Ebner
0 siblings, 0 replies; 19+ messages in thread
From: Fiona Ebner @ 2025-02-03 13:12 UTC (permalink / raw)
To: Daniel Herzig; +Cc: Proxmox VE development discussion
Am 03.02.25 um 14:09 schrieb Fiona Ebner:
> This is problematic for live migration, see my initial reply. Either we
> need to drop the CD from the config or we need another option "missing"
> that gets set if it is missing during start-up (and cleared if it is
> there during startup). Then the target of migration can also know about
To clarify, here I mean "cleared if the CD is there during a startup
that is not for an incoming migration".
> it when starting its own instance of the VM. We could also do this via a
> special section in the configuration, see the following series[0] since
> this would be internal-only information.
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2025-02-03 13:13 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-01-30 11:31 [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 1/6] fix #4225: qemuserver: drive: add parameter to mark drive required Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-31 11:09 ` Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 2/6] fix #4225: qemuserver: introduce sub eject_nonrequired_isos Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-31 9:52 ` Fiona Ebner
2025-01-31 13:58 ` Daniel Herzig
2025-02-03 9:00 ` Fiona Ebner
2025-02-03 10:15 ` Daniel Herzig
2025-02-03 13:09 ` Fiona Ebner
2025-02-03 13:12 ` Fiona Ebner
2025-01-30 11:31 ` [pve-devel] [PATCH qemu-server v3 3/6] fix #4225: qemuserver, test: put eject_nonrequired_isos in place Daniel Herzig
2025-01-31 9:36 ` Fiona Ebner
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 4/6] fix #4225: ui: form: isoselector: add checkbox for 'essential' param Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 5/6] fix #4225: ui: qemu: cdedit: enable 'Essential' checkbox for isos Daniel Herzig
2025-01-30 11:31 ` [pve-devel] [PATCH pve-manager v3 6/6] fix #4225: ui: qemu: hardware: add eject button for cdroms Daniel Herzig
2025-01-31 9:36 ` [pve-devel] [PATCH qemu-server v3 0/6] bugzilla #4225 -- improve handling of unavailable ISOs Fiona Ebner
2025-01-31 10:38 ` Daniel Herzig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox