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 951431FF0B7 for ; Tue, 25 Aug 2026 15:55:06 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id E8DDE2156F; Tue, 25 Aug 2026 15:55:05 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH guest-common v4 1/7] helpers: exec hookscript: add optional parameters Date: Tue, 25 Aug 2026 15:54:46 +0200 Message-ID: <20260825135502.3971930-2-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260825135502.3971930-1-d.csapak@proxmox.com> References: <20260825135502.3971930-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.738 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: FHUGKGGRQECBHXFSZCGYFHXSGA5HVENK X-Message-ID-Hash: FHUGKGGRQECBHXFSZCGYFHXSGA5HVENK 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 --- 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..6899b05 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 //= {}; + eval { my $hookscript = check_hookscript($conf->{hookscript}); die $@ if $@; + # copy EVN 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