All checks were successful
Run Check Script / check (pull_request) Successful in 59s
Co-authored-by: Jean-Gabriel Gill-Couture <jeangabriel.gc@gmail.com> Co-authored-by: Ian Letourneau <ian@noma.to> Reviewed-on: https://git.nationtech.io/NationTech/harmony/pulls/130 Reviewed-by: Ian Letourneau <ian@noma.to> Co-authored-by: Jean-Gabriel Gill-Couture <jg@nationtech.io> Co-committed-by: Jean-Gabriel Gill-Couture <jg@nationtech.io>
64 lines
1.9 KiB
Django/Jinja
64 lines
1.9 KiB
Django/Jinja
#!ipxe
|
|
|
|
# iPXE Chainloading Script
|
|
#
|
|
# Attempts to load a host-specific configuration file. If that fails,
|
|
# it logs the failure, waits for a few seconds, and then attempts to
|
|
# load a generic fallback configuration.
|
|
|
|
# --- Configuration ---
|
|
set base-url http://{{ gateway_ip }}:8080
|
|
set hostfile ${base-url}/byMAC/01-${mac:hexhyp}.ipxe
|
|
set fallbackfile ${base-url}/fallback.ipxe
|
|
|
|
# --- Script Logic ---
|
|
|
|
echo
|
|
echo "========================================"
|
|
echo " iPXE Network Boot Initiated"
|
|
echo "========================================"
|
|
echo "Client MAC Address: ${mac}"
|
|
echo "Boot Server URL: ${base-url}"
|
|
echo
|
|
|
|
# --- Primary Boot Attempt ---
|
|
echo "--> Attempting to load host-specific script..."
|
|
echo " Location: ${hostfile}"
|
|
|
|
sleep 2
|
|
|
|
# The "&& exit ||" pattern works as follows:
|
|
# 1. iPXE attempts to 'chain' the hostfile.
|
|
# 2. If successful (returns 0), the "&& exit" part is executed, and this script terminates.
|
|
# 3. If it fails (returns non-zero), the "||" part is triggered, and execution continues below.
|
|
chain --autofree --replace ${hostfile} && exit ||
|
|
|
|
# --- Fallback Boot Attempt ---
|
|
# This part of the script is only reached if the 'chain ${hostfile}' command above failed.
|
|
echo
|
|
echo "--> Host-specific script not found or failed to load."
|
|
echo
|
|
|
|
echo
|
|
echo "--> Attempting to load fallback script..."
|
|
echo " Location: ${fallbackfile}"
|
|
|
|
sleep 8
|
|
|
|
chain --autofree --replace ${fallbackfile} && exit ||
|
|
|
|
# --- Final Failure ---
|
|
# This part is only reached if BOTH chain commands have failed.
|
|
echo
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo " FATAL: All boot scripts failed!"
|
|
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
echo "Could not load either the host-specific script or the fallback script."
|
|
echo "Dropping to iPXE shell for manual troubleshooting in 10 seconds."
|
|
sleep 8
|
|
|
|
shell
|
|
|
|
# A final exit is good practice, though 'shell' is a blocking command.
|
|
exit
|