From: Fabian Ebner Date: Tue, 18 Jan 2022 08:21:14 +0000 (+0100) Subject: close #3476: vzdump: add job-init hook X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=b241deb731369ff96b26bfa670c5c8d273aea02c;hp=69cd5c7519b87ac2d4d486eacd13dea1d5c0013c;p=pve-manager.git close #3476: vzdump: add job-init hook which allows users to prepare the backup storage for activation (e.g. by waking up a remote node). Suggested-by: Fabian Grünbichler Reviewed-by: Fabian Grünbichler Acked-by: Thomas Lamprecht Signed-off-by: Fabian Ebner --- diff --git a/PVE/VZDump.pm b/PVE/VZDump.pm index b5a5fadd..65867325 100644 --- a/PVE/VZDump.pm +++ b/PVE/VZDump.pm @@ -497,6 +497,13 @@ sub new { $opts->{storage} = 'local'; } + $self->{job_init_log} = ''; + open my $job_init_fd, '>', \$self->{job_init_log}; + $self->run_hook_script('job-init', undef, $job_init_fd); + close $job_init_fd; + + PVE::Cluster::cfs_update(); # Pick up possible changes made by the hook script. + my $errors = ''; if ($opts->{storage}) { @@ -1194,7 +1201,15 @@ sub exec_backup { my $totaltime = time() - $starttime; - eval { $self->sendmail ($tasklist, $totaltime, undef, $job_start_log, $job_end_log); }; + eval { + $self->sendmail( + $tasklist, + $totaltime, + undef, + $self->{job_init_log} . $job_start_log, + $job_end_log, + ); + }; debugmsg ('err', $@) if $@; die $err if $err; diff --git a/vzdump-hook-script.pl b/vzdump-hook-script.pl index 60edbc04..4d530cef 100755 --- a/vzdump-hook-script.pl +++ b/vzdump-hook-script.pl @@ -11,11 +11,13 @@ print "HOOK: " . join (' ', @ARGV) . "\n"; my $phase = shift; -if ($phase eq 'job-start' || +if ($phase eq 'job-init' || + $phase eq 'job-start' || $phase eq 'job-end' || $phase eq 'job-abort') { # undef for Proxmox Backup Server storages + # undef in phase 'job-init' except when --dumpdir is used directly my $dumpdir = $ENV{DUMPDIR}; # undef when --dumpdir is used directly @@ -26,6 +28,14 @@ if ($phase eq 'job-start' || print "storeid=$storeid;" if defined($storeid); print "\n"; + # example: wake up remote storage node and enable storage + if ($phase eq 'job-init') { + #system("wakeonlan AA:BB:CC:DD:EE:FF"); + #sleep(30); + #system ("/sbin/pvesm set $storeid --disable 0") == 0 || + # die "enabling storage $storeid failed"; + } + # do what you want } elsif ($phase eq 'backup-start' ||