ESXi Deployment - Before_Provision Hook Script Not Executed

Hi All,

Currently running a fresh Foreman 3.2 installation on Ubuntu 20.04. I’ve configured a deployment for ESXi 7.0.2 based on the following procedure …

Foreman :: Deploying ESXi through Foreman (theforeman.org)

… with some minor modifications to suit. It works well except for the before_provision hook script which is not being executed.

Production.log shows both after_build and before_provision scripts being discovered but only the after-build script is executed …

[D|app|] Found hook to Host::Managed#after_build, filename 01-prep-esxi-uefimode.sh
[D|app|] Found hook to Host::Managed#before_provision, filename 01-esxi-unset-pxeloaders.sh
[I|app|] Finished discovering 1 hooks for Host::Managed#after_build
[I|app|] Finished discovering 1 hooks for Host::Managed#before_provision
[D|app|] Created hook method after_build on Host::Managed
[D|app|] Created hook method before_provision on Host::Managed
[D|app|0dda1190] custom hook after_build on esxi-vm1.domain.com will be executed if defined.
[D|app|0dda1190] Observed after_build hook on esxi-vm1.domain.com
[D|app|0dda1190] Running 1 hooks for Host::Managed#after_build
[D|app|0dda1190] Running hook: /usr/share/foreman/config/hooks/host/managed/after_build/01-prep-esxi-uefimode.sh after_build esxi-vm1.domain.com

The deployment procedure runs something like this:

  • host pxe boots into foreman network via efi
  • gets a dhcp lease from foreman server
  • boots into the Foreman discovery image efi
  • gets discovered successfully
  • host is provisioned in Foreman web interface using host group and then Customised Host is clicked
  • host is customised accordingly before the Submit button is clicked
  • host loads the ESXi installer and installs successfully and then reboots

This is where I expect the before_provision script to kick in which removes the host from build mode. But the script doesn’t run and the host remains in build mode. If I don’t manually cancel the build, the build process starts all over again.

Both scripts are executable:
-rwxr-xr-x 1 foreman foreman 2368 May 19 13:37 01-prep-esxi-uefimode.sh*
-rwxr-xr-x 1 foreman foreman 1285 May 19 13:37 01-esxi-unset-pxeloaders.sh*

Both after_build and before_provision directories have the symlink:
lrwxrwxrwx 1 foreman foreman 94 May 19 08:09 hook_functions.sh → /usr/share/foreman/vendor/ruby/2.7.0/gems/foreman_hooks-0.3.17/examples/bash/hook_functions.sh

I can see the after_build.log file in /tmp/systemd-private-c53966d6d0e0479e938d2944deff09d0-foreman.service-m1h7Mi/tmp. But I can’t find any before_provision.log file anywhere.

The Provisioing Template does have this code:

wget -O /dev/null <%= foreman_url(‘built’) %>
echo “Done with Foreman call”

Any pointers in the right direction to troubleshoot this would be most appreciated.

Thanks.

Found the issue … or at least I think I did.

“foreman_url” is set as https and “wget -O /dev/null <%= foreman_url(‘built’) %>” only works if its http.

In the template, I changed the url from “foreman_url(‘built’)” to http://foreman-server.com/unattended/built

… and the wget command competes successfully, which kicks off the before_provision script to set the pxeloader to “None” and the host’s Build changes from “Pending Installation” to “Installed”.

Cheers.

Hello,
I have same problem -Pending Installation
I tried everithing but nothing help.

Could you help me please