From: Dietmar Maurer Date: Wed, 19 Nov 2014 08:20:09 +0000 (+0100) Subject: vmconfig_cleanup_pending: new method to clenup setting in [PENDING] X-Git-Url: https://git.proxmox.com/?p=qemu-server.git;a=commitdiff_plain;h=c750e90abddddebb6b3c155db87274103c489e1e vmconfig_cleanup_pending: new method to clenup setting in [PENDING] Signed-off-by: Dietmar Maurer --- diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 0182150..405ca38 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -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}}); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 46d6a58..057032c 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -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+',