From 5294c110bb20a79dde9c5553833e60c910dc5b36 Mon Sep 17 00:00:00 2001 From: Christian Ebner Date: Fri, 19 Apr 2019 12:06:07 +0200 Subject: [PATCH] fix: #1075: Restore VM template to VM and try to convert to template. 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 --- 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 184f32a6..62e65490 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -557,14 +557,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 cd86fec9..2ca5f6e9 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*$/)) {