]> git.proxmox.com Git - qemu-server.git/commitdiff
api: always add new CD drives to bootorder
authorStefan Reiter <s.reiter@proxmox.com>
Mon, 5 Jul 2021 09:14:12 +0000 (11:14 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 23 Jul 2021 09:04:19 +0000 (11:04 +0200)
Attaching an ISO image to a VM is usually/often done for two reasons:
* booting an installer image
* supplying additional drivers to an installer (e.g. virtio)

Both of these cases (the latter at least with SeaBIOS and the Windows
installer) require the disk to be marked as bootable.

For this reason, enable the bootable flag for all new CDROM drives
attached to a VM by adding it to the bootorder list. It is appended to
the end, as otherwise it would cause new drives to boot before already
existing boot targets, which would be a more grave (and IMO bad)
behaviour change.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
PVE/API2/Qemu.pm

index f2557e32221aaab16f191eb90f8eb0c5cb18b59a..6038b28c65f68e2389f59610b8f6002cd056d22d 100644 (file)
@@ -1357,6 +1357,14 @@ my $update_vm_api  = sub {
                        if defined($conf->{pending}->{$opt});
 
                    &$create_disks($rpcenv, $authuser, $conf->{pending}, $arch, $storecfg, $vmid, undef, {$opt => $param->{$opt}});
+
+                   # append new CD drives to bootorder to mark them bootable
+                   my $drive = PVE::QemuServer::parse_drive($opt, $param->{$opt});
+                   if (PVE::QemuServer::drive_is_cdrom($drive, 1)) {
+                       push @bootorder, $opt;
+                       $conf->{pending}->{boot} = PVE::QemuServer::print_bootorder(\@bootorder);
+                       $modified->{boot} = 1;
+                   }
                } elsif ($opt =~ m/^serial\d+/) {
                    if ((!defined($conf->{$opt}) || $conf->{$opt} eq 'socket') && $param->{$opt} eq 'socket') {
                        $rpcenv->check_vm_perm($authuser, $vmid, undef, ['VM.Config.HWType']);