since this method will be both used by qemu and lxc config GET calls, it
makes sense to move it into AbstractConfig. only difference is that qemu
also hides the cipassword when it's set. this can be handled by having
qemu overwrite the method and add the cipassword code.

Signed-off-by: Oguz Bektas <o.bek...@proxmox.com>
---
 PVE/AbstractConfig.pm | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/PVE/AbstractConfig.pm b/PVE/AbstractConfig.pm
index 910ca86..6d3f169 100644
--- a/PVE/AbstractConfig.pm
+++ b/PVE/AbstractConfig.pm
@@ -136,6 +136,41 @@ sub cleanup_pending {
     return $changes;
 }
 
+sub load_current_config {
+    my ($class, $vmid, $snapname, $current) = @_;
+
+    my $conf = $class->load_config($vmid);
+
+    if ($snapname) {
+       my $snapshot = $conf->{snapshots}->{$snapname};
+       die "snapshot '$snapname' does not exist\n" if !defined($snapshot);
+
+       # we need the digest of the file
+       $snapshot->{digest} = $conf->{digest};
+       $conf = $snapshot;
+    }
+
+    # take pending changes in
+    if (!$current) {
+       foreach my $opt (keys %{$conf->{pending}}) {
+           next if $opt eq 'delete';
+           my $value = $conf->{pending}->{$opt};
+           next if ref($value); # just to be sure
+           $conf->{$opt} = $value;
+       }
+       my $pending_delete_hash = 
$class->parse_pending_delete($conf->{pending}->{delete});
+       foreach my $opt (keys %$pending_delete_hash) {
+           delete $conf->{$opt} if $conf->{$opt};
+       }
+    }
+
+    delete $conf->{snapshots};
+    delete $conf->{pending};
+
+    return $conf;
+}
+
+
 # Lock config file using flock, run $code with @param, unlock config file.
 # $timeout is the maximum time to aquire the flock
 sub lock_config_full {
-- 
2.20.1

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

Reply via email to