From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id E2E471FF0AB for ; Wed, 23 Sep 2026 09:05:48 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 76710215E5; Wed, 23 Sep 2026 09:05:30 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH guest-common v5 1/9] helpers: exec hookscript: add optional parameters Date: Wed, 23 Sep 2026 09:04:54 +0200 Message-ID: <20260923070522.434715-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260923070522.434715-1-d.csapak@proxmox.com> References: <20260923070522.434715-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.454 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: O6W4PEZFD4CDCU6HZMVNIHPQEYULRUMF X-Message-ID-Hash: O6W4PEZFD4CDCU6HZMVNIHPQEYULRUMF X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: sometimes we may want to call the hookscript with additional parameters in some phases, e.g. we want to call it for each pci device that was prepared before starting with the correct uuid or pci id. Add these new parameters to the environment instead of the positional parameters of the hookscript, since that is more future proof and we get a key/value pair instead of just the position. Use the prefix 'PVE_HOOK_' so they're always in a separate namespace. Signed-off-by: Dominik Csapak --- changes from v4: * improve ENV comment * use better style for $params initialization src/PVE/GuestHelpers.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/PVE/GuestHelpers.pm b/src/PVE/GuestHelpers.pm index f8d112b..41c816f 100644 --- a/src/PVE/GuestHelpers.pm +++ b/src/PVE/GuestHelpers.pm @@ -115,14 +115,24 @@ sub check_hookscript { } sub exec_hookscript { - my ($conf, $vmid, $phase, $stop_on_error) = @_; + my ($conf, $vmid, $phase, $stop_on_error, $params) = @_; return if !$conf->{hookscript}; + $params = {} if !defined($params); + eval { my $hookscript = check_hookscript($conf->{hookscript}); die $@ if $@; + # copy ENV, so we keep the inherited one before adding to it + local %ENV = (%ENV); + + for my $key (keys $params->%*) { + my $new_key = "PVE_HOOK_" . uc($key); + $ENV{$new_key} = $params->{$key}; + } + PVE::Tools::run_command([$hookscript, $vmid, $phase]); }; if (my $err = $@) { -- 2.47.3