While the new options should be written to the pending config, the
decisions (currently only one) in create_disks needs to be made for
the current config.

Seems to fix EFI disk creation, but actually, it's only
future-proofing, because, currently, the same OVMF_VARS file is
used independently of $smm.

The correct config is also needed to determine the correct size for
the EFI disk for the upcoming import-from feature.

Signed-off-by: Fabian Ebner <f.eb...@proxmox.com>
---
 PVE/API2/Qemu.pm | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 02b26d2..c6587ef 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -237,12 +237,7 @@ my $create_disks = sub {
        die $err;
     }
 
-    # modify vm config if everything went well
-    foreach my $ds (keys %$res) {
-       $conf->{$ds} = $res->{$ds};
-    }
-
-    return $vollist;
+    return ($vollist, $res);
 };
 
 my $check_cpu_model_access = sub {
@@ -712,7 +707,18 @@ __PACKAGE__->register_method({
 
                my $vollist = [];
                eval {
-                   $vollist = &$create_disks($rpcenv, $authuser, $conf, $arch, 
$storecfg, $vmid, $pool, $param, $storage);
+                   ($vollist, my $created_opts) = $create_disks->(
+                       $rpcenv,
+                       $authuser,
+                       $conf,
+                       $arch,
+                       $storecfg,
+                       $vmid,
+                       $pool,
+                       $param,
+                       $storage,
+                   );
+                   $conf->{$_} = $created_opts->{$_} for keys 
$created_opts->%*;
 
                    if (!$conf->{boot}) {
                        my $devs = 
PVE::QemuServer::get_default_bootdevices($conf);
@@ -1364,7 +1370,17 @@ my $update_vm_api  = sub {
                    PVE::QemuServer::vmconfig_register_unused_drive($storecfg, 
$vmid, $conf, PVE::QemuServer::parse_drive($opt, $conf->{pending}->{$opt}))
                        if defined($conf->{pending}->{$opt});
 
-                   &$create_disks($rpcenv, $authuser, $conf->{pending}, $arch, 
$storecfg, $vmid, undef, {$opt => $param->{$opt}});
+                   my (undef, $created_opts) = $create_disks->(
+                       $rpcenv,
+                       $authuser,
+                       $conf,
+                       $arch,
+                       $storecfg,
+                       $vmid,
+                       undef,
+                       {$opt => $param->{$opt}},
+                   );
+                   $conf->{pending}->{$_} = $created_opts->{$_} for keys 
$created_opts->%*;
 
                    # default legacy boot order implies all cdroms anyway
                    if (@bootorder) {
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to