[pve-devel] [PATCH guest-common v2 1/1] add exec_hookscript to GuestHelpers

Dominik Csapak d.csapak at proxmox.com
Thu Jan 24 12:30:54 CET 2019


this can be called from qemu-server/pve-container to execute a hookscript

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* die when stop_on_error is set and the script does not exists
  or is not executable

 PVE/GuestHelpers.pm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/PVE/GuestHelpers.pm b/PVE/GuestHelpers.pm
index c326812..8327dcb 100644
--- a/PVE/GuestHelpers.pm
+++ b/PVE/GuestHelpers.pm
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 
 use PVE::Tools;
+use PVE::Storage;
 
 # We use a separate lock to block migration while a replication job
 # is running.
@@ -23,4 +24,35 @@ sub guest_migration_lock {
     return $res;
 }
 
+sub exec_hookscript {
+    my ($conf, $vmid, $phase, $stop_on_error) = @_;
+
+    return if !$conf->{hookscript};
+    my $storecfg = PVE::Storage::config();
+    my $hookscript = PVE::Storage::path($storecfg, $conf->{hookscript});
+    if (!$hookscript || ! -x $hookscript) {
+	my $errmsg = "hookscript $hookscript not found or not executable\n";
+
+	if ($stop_on_error) {
+	    die $errmsg;
+	} else {
+	    warn $errmsg;
+	}
+	return;
+    }
+
+    eval {
+	PVE::Tools::run_command([$hookscript, $vmid, $phase]);
+    };
+
+    if (my $err = $@) {
+	my $errmsg = "hookscript error for $vmid on $phase: $err\n";
+	if ($stop_on_error) {
+	    die $errmsg;
+	} else {
+	    warn $errmsg;
+	}
+    }
+}
+
 1;
-- 
2.11.0





More information about the pve-devel mailing list