[pve-devel] [PATCH v3 qemu-server 2/2] Fix #1924: add snapshot parameter

Rhonda D'Vine rhonda at proxmox.com
Tue Jan 22 17:27:05 CET 2019


The config and showcmd CLI commands offer the config and showcmd
functions. Both of that outputs may vary with respect to a given
snapshot. This adds a switch that shows the corresponding snapshot's
config and command line.

Signed-off-by: Rhonda D'Vine <rhonda at proxmox.com>
---
 PVE/API2/Qemu.pm  | 19 +++++++++++++++++++
 PVE/CLI/qm.pm     | 12 ++++++++++--
 PVE/QemuServer.pm | 13 ++++++++++++-
 debian/control    |  4 ++--
 4 files changed, 43 insertions(+), 5 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index b55fd13..6d4d5fe 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -830,6 +830,14 @@ __PACKAGE__->register_method({
 		default => 0,
 		type => 'boolean',
             },
+	   snapshot => get_standard_option('pve-snapshot-name', {
+		description => "Fetch config values from given snapshot.",
+		optional => 1,
+		completion => sub {
+		    my ($cmd, $pname, $cur, $args) = @_;
+		    PVE::QemuConfig->snapshot_list($cur->[0]);
+		},
+            }),
 	},
     },
     returns => {
@@ -847,6 +855,17 @@ __PACKAGE__->register_method({
 
 	my $conf = PVE::QemuConfig->load_config($param->{vmid});
 
+	my $snapname = $param->{snapshot};
+	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;
+	}
+
 	delete $conf->{snapshots};
 
 	if (!$param->{current}) {
diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm
index 26d4217..145d4f1 100755
--- a/PVE/CLI/qm.pm
+++ b/PVE/CLI/qm.pm
@@ -127,7 +127,15 @@ __PACKAGE__->register_method ({
 		type => 'boolean',
 		optional => 1,
 		default => 0,
-	    }
+	    },
+	    snapshot => get_standard_option('pve-snapshot-name', {
+		description => "Fetch config values from given snapshot.",
+		optional => 1,
+		completion => sub {
+		    my ($cmd, $pname, $cur, $args) = @_;
+		    PVE::QemuConfig->snapshot_list($cur->[0]);
+		}
+	    }),
 	},
     },
     returns => { type => 'null'},
@@ -135,7 +143,7 @@ __PACKAGE__->register_method ({
 	my ($param) = @_;
 
 	my $storecfg = PVE::Storage::config();
-	my $cmdline = PVE::QemuServer::vm_commandline($storecfg, $param->{vmid});
+	my $cmdline = PVE::QemuServer::vm_commandline($storecfg, $param->{vmid}, $param->{snapshot});
 
 	$cmdline =~ s/ -/ \\\n  -/g if $param->{pretty};
 
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 1ccdccf..1642245 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -5363,10 +5363,21 @@ sub vm_human_monitor_command {
 }
 
 sub vm_commandline {
-    my ($storecfg, $vmid) = @_;
+    my ($storecfg, $vmid, $snapname) = @_;
 
     my $conf = PVE::QemuConfig->load_config($vmid);
 
+    if ($snapname) {
+	my $snapshot = $conf->{snapshots}->{$snapname};
+	die "snapshot '$snapname' does not exist\n"
+	    if !defined($snapshot);
+	my $digest = $conf->{digest};
+
+	# we need the digest of the file
+	$snapshot->{digest} = $conf->{digest};
+	$conf = $snapshot;
+    }
+
     my $defaults = load_defaults();
 
     my $cmd = config_to_command($storecfg, $vmid, $conf, $defaults);
diff --git a/debian/control b/debian/control
index 6be81ca..e4addf7 100644
--- a/debian/control
+++ b/debian/control
@@ -6,7 +6,7 @@ Build-Depends: debhelper (>= 7.0.50~),
                libio-multiplex-perl,
                libjson-c-dev,
                libpve-common-perl (>= 5.0-42),
-               libpve-guest-common-perl (>= 2.0-18),
+               libpve-guest-common-perl (>= 2.0-19),
                libpve-storage-perl,
                libtest-mockmodule-perl,
                libxml-libxml-perl,
@@ -17,7 +17,7 @@ Build-Depends: debhelper (>= 7.0.50~),
                pve-firewall,
                qemu-utils,
 Standards-Version: 3.9.5
-Homepage: http://www.proxmox.com
+Homepage: https://www.proxmox.com/
 
 Package: qemu-server
 Architecture: any
-- 
2.11.0





More information about the pve-devel mailing list