[pve-devel] [PATCH qemu-server 1/1] Add pre/post-restore hooks to VMs
Stefan Hanreich
s.hanreich at proxmox.com
Thu Nov 10 16:33:41 CET 2022
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
PVE/API2/Qemu.pm | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index a539b5c..3d4079e 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -888,6 +888,7 @@ __PACKAGE__->register_method({
die "$emsg $@" if $@;
my $restored_data = 0;
+ my $hook_executed = 0;
my $restorefn = sub {
my $conf = PVE::QemuConfig->load_config($vmid);
@@ -895,6 +896,9 @@ __PACKAGE__->register_method({
die "$emsg vm is running\n" if PVE::QemuServer::check_running($vmid);
+ PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'pre-restore', 1);
+ $hook_executed = 1;
+
my $realcmd = sub {
my $restore_options = {
storage => $storage,
@@ -922,6 +926,8 @@ __PACKAGE__->register_method({
eval { PVE::QemuServer::template_create($vmid, $restored_conf) };
warn $@ if $@;
}
+
+ PVE::GuestHelpers::exec_hookscript($restored_conf, $vmid, 'post-restore');
};
# ensure no old replication state are exists
@@ -1016,10 +1022,10 @@ __PACKAGE__->register_method({
if (my $err = $@) {
eval { PVE::QemuConfig->remove_lock($vmid, 'create') };
warn $@ if $@;
- if ($restored_data) {
+ if ($hook_executed && $restored_data) {
warn "error after data was restored, VM disks should be OK but config may "
."require adaptions. VM $vmid state is NOT cleaned up.\n";
- } else {
+ } elsif ($hook_executed && !$restored_data) {
warn "error before or during data restore, some or all disks were not "
."completely restored. VM $vmid state is NOT cleaned up.\n";
}
--
2.30.2
More information about the pve-devel
mailing list