]> git.proxmox.com Git - qemu-server.git/commitdiff
vmconfig_cleanup_pending: new method to clenup setting in [PENDING]
authorDietmar Maurer <dietmar@proxmox.com>
Wed, 19 Nov 2014 08:20:09 +0000 (09:20 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 7 Jan 2015 05:42:39 +0000 (06:42 +0100)
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
PVE/API2/Qemu.pm
PVE/QemuServer.pm

index 018215003f2f09eb0d229862b44c78ba9678e9de..405ca383663b211e10343695111f8ceb35ac69f8 100644 (file)
@@ -1006,14 +1006,8 @@ my $update_vm_api  = sub {
            }
 
            # remove pending changes when nothing changed
-           my $changes;
            $conf = PVE::QemuServer::load_config($vmid); # update/reload
-           foreach my $opt (keys %{$conf->{pending}}) { # add/change
-               if (defined($conf->{$opt}) && ($conf->{pending}->{$opt} eq  $conf->{$opt})) {
-                   $changes = 1;
-                   delete $conf->{pending}->{$opt};
-               }
-           }
+           my $changes = PVE::QemuServer::vmconfig_cleanup_pending($conf);
            PVE::QemuServer::update_config_nolock($vmid, $conf, 1) if $changes;
 
            return if !scalar(keys %{$conf->{pending}});
index 46d6a5861dac3f871201c97e7b2f36d65f287227..057032c39f23c8039aac11b4332e5f1a011556aa 100644 (file)
@@ -1486,6 +1486,38 @@ sub vmconfig_register_unused_drive {
     }
 }
 
+sub vmconfig_cleanup_pending {
+    my ($conf) = @_;
+
+    # remove pending changes when nothing changed
+    my $changes;
+    foreach my $opt (keys %{$conf->{pending}}) {
+       if (defined($conf->{$opt}) && ($conf->{pending}->{$opt} eq  $conf->{$opt})) {
+           $changes = 1;
+           delete $conf->{pending}->{$opt};
+       }
+    }
+
+    # remove delete if option is not set
+    my $pending_delete_hash = {};
+    foreach my $opt (PVE::Tools::split_list($conf->{pending}->{delete})) {
+       if (defined($conf->{$opt})) {
+           $pending_delete_hash->{$opt} = 1;
+       } else {
+           $changes = 1;
+       }
+    }
+
+    my @keylist = keys %$pending_delete_hash;
+    if (scalar(@keylist)) {
+       $conf->{pending}->{delete} = join(',', @keylist);
+    } else {
+       delete $conf->{pending}->{delete};
+    }
+
+    return $changes;
+}
+
 my $valid_smbios1_options = {
     manufacturer => '\S+',
     product => '\S+',