[pve-devel] [PATCH qemu] fix: #1075: Restore VM template to VM and try to convert to template.

Christian Ebner c.ebner at proxmox.com
Fri Apr 19 12:06:07 CEST 2019


The restore of a backup from a VM template will first restore the VM and then
convert the restored VM back into a template.
This automatically performes the steps of the current behaviour, where the user
has to manually convert the restored VM back to a template.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
 PVE/API2/Qemu.pm  | 11 +++++++++--
 PVE/QemuServer.pm |  1 -
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 651f64f..f61e58e 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -556,14 +556,21 @@ __PACKAGE__->register_method({
 	    PVE::QemuConfig->check_protection($conf, $emsg);
 
 	    die "$emsg vm is running\n" if PVE::QemuServer::check_running($vmid);
-	    die "$emsg vm is a template\n" if PVE::QemuConfig->is_template($conf);
 
 	    my $realcmd = sub {
 		PVE::QemuServer::restore_archive($archive, $vmid, $authuser, {
 		    storage => $storage,
 		    pool => $pool,
 		    unique => $unique,
-		    bwlimit => $bwlimit, });
+		    bwlimit => $bwlimit,
+		});
+		my $restored_conf = PVE::QemuConfig->load_config($vmid);
+		# Convert restored VM to template if backup was VM template
+		if (PVE::QemuConfig->is_template($restored_conf)) {
+		    warn "Convert to template.\n";
+		    eval { PVE::QemuServer::template_create($vmid, $restored_conf) };
+		    warn $@ if $@;
+		}
 
 		PVE::AccessControl::add_vm_to_pool($vmid, $pool) if $pool;
 
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index cd86fec..2ca5f6e 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -5904,7 +5904,6 @@ sub restore_update_config_line {
     return if $line =~ m/^lock:/;
     return if $line =~ m/^unused\d+:/;
     return if $line =~ m/^parent:/;
-    return if $line =~ m/^template:/; # restored VM is never a template
 
     my $dc = PVE::Cluster::cfs_read_file('datacenter.cfg');
     if (($line =~ m/^(vlan(\d+)):\s*(\S+)\s*$/)) {
-- 
2.11.0




More information about the pve-devel mailing list