Fix #1924: add snapshot parameter
authorRhonda D'Vine <rhonda@proxmox.com>
Wed, 30 Jan 2019 13:43:38 +0000 (14:43 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Wed, 30 Jan 2019 13:56:43 +0000 (14:56 +0100)
The qm CLI command offer the config and showcmd functions. Both of those
outputs may vary with respect to a given snapshot. This adds a switch
that shows the corresponding snapshot's config and command line.

The code needs a newer libpve-guest-common-perl, thus bumping the
dependency.

Signed-off-by: Rhonda D'Vine <rhonda@proxmox.com>
PVE/API2/Qemu.pm
PVE/CLI/qm.pm
PVE/QemuServer.pm
debian/control

index 148ea1a..7f737bf 100644 (file)
@@ -829,6 +829,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($args->[0]);
+               },
+           }),
        },
     },
     returns => {
@@ -846,6 +854,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}) {
index 26d4217..f4bacd6 100755 (executable)
@@ -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($args->[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};
 
index bc3bb1d..3b64286 100644 (file)
@@ -5372,10 +5372,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);
index 6be81ca..0aec27d 100644 (file)
@@ -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,