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 <f.gruenbichler@proxmox.com>
Reviewed-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
Acked-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
This commit is contained in:
Fabian Ebner 2022-01-18 09:21:14 +01:00 committed by Fabian Grünbichler
parent 69cd5c7519
commit b241deb731
2 changed files with 27 additions and 2 deletions

View File

@ -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;

View File

@ -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' ||