From b14477e718969468a9a5ef639533b9ff620e84ec Mon Sep 17 00:00:00 2001 From: Rhonda D'Vine Date: Wed, 30 Jan 2019 14:43:38 +0100 Subject: [PATCH] Fix #1924: add snapshot parameter 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 --- PVE/API2/Qemu.pm | 19 +++++++++++++++++++ PVE/CLI/qm.pm | 12 ++++++++++-- PVE/QemuServer.pm | 13 ++++++++++++- debian/control | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 148ea1a..7f737bf 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -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}) { diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm index 26d4217..f4bacd6 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($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}; diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index bc3bb1d..3b64286 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -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); diff --git a/debian/control b/debian/control index 6be81ca..0aec27d 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, -- 2.39.2