forked from NationTech/harmony
		
	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
 |