]> git.proxmox.com Git - pve-guest-common.git/blame - PVE/GuestHelpers.pm
implement remove_vmid_jobs for ReplicationConfig
[pve-guest-common.git] / PVE / GuestHelpers.pm
CommitLineData
94d526d7
DM
1package PVE::GuestHelpers;
2
3use strict;
4use warnings;
5
6use PVE::Tools;
3acb4e74 7use PVE::Storage;
94d526d7
DM
8
9# We use a separate lock to block migration while a replication job
10# is running.
11
7919c482
WB
12our $lockdir = '/var/lock/pve-manager';
13
94d526d7
DM
14sub guest_migration_lock {
15 my ($vmid, $timeout, $func, @param) = @_;
16
17 my $lockid = "pve-migrate-$vmid";
94d526d7
DM
18
19 mkdir $lockdir;
20
21 my $res = PVE::Tools::lock_file("$lockdir/$lockid", $timeout, $func, @param);
22 die $@ if $@;
23
24 return $res;
25}
26
3acb4e74
DC
27sub check_hookscript {
28 my ($volid, $storecfg) = @_;
29
30 $storecfg = PVE::Storage::config() if !defined($storecfg);
31 my ($path, undef, $type) = PVE::Storage::path($storecfg, $volid);
32
33 die "'$volid' is not in the snippets directory\n"
34 if $type ne 'snippets';
35
36 die "script '$volid' does not exists\n"
37 if ! -f $path;
38
39 die "script '$volid' is not executable\n"
40 if ! -x $path;
41
42 return $path;
43}
44
45sub exec_hookscript {
46 my ($conf, $vmid, $phase, $stop_on_error) = @_;
47
48 return if !$conf->{hookscript};
3acb4e74
DC
49
50 eval {
1c9da8ac
TL
51 my $hookscript = check_hookscript($conf->{hookscript});
52 die $@ if $@;
53
3acb4e74
DC
54 PVE::Tools::run_command([$hookscript, $vmid, $phase]);
55 };
3acb4e74
DC
56 if (my $err = $@) {
57 my $errmsg = "hookscript error for $vmid on $phase: $err\n";
1c9da8ac
TL
58 die $errmsg if ($stop_on_error);
59 warn $errmsg;
3acb4e74
DC
60 }
61}
62
94d526d7 631;