#!ipxe

echo
echo ================================================================================
echo Warewulf v4 now booting: {{.Fqdn}} ({{.Hwaddr}})
echo
echo Container:     {{.ContainerName}}
{{if .KernelOverride }}
echo Kernel:        {{.KernelOverride}}
{{else}}
echo Kernel:        {{.ContainerName}} (container default)
{{end}}
echo KernelArgs:    {{.KernelArgs}}
echo

set uri_base http://{{.Ipaddr}}:{{.Port}}/provision/{{.Hwaddr}}?assetkey=${asset}&uuid=${uuid}
echo Warewulf Controller: {{.Ipaddr}}

echo Downloading Kernel Image:
kernel --name kernel ${uri_base}&stage=kernel       || goto reboot

# imgextract causes RAM space problems on non-EFI systems (because of the 3GB barrier
# in 32-Bit mode).
# -> Use the old initrd method with a compressed image to save as much RAM as possible
# in this early boot stage.
# See <https://github.com/warewulf/warewulf/issues/222> for more details.
iseq ${platform} efi && goto efi || goto noefi

:efi

# try extracting compressed images first
# NOTE: system overlay tends to be the smallest, so failure here is the cheapest
echo Downloading Container Image:
imgextract --name container ${uri_base}&stage=container&compress=gz || goto nocompress

echo Downloading System Overlay:
imgextract --name system ${uri_base}&stage=system&compress=gz       || goto reboot

echo Downloading Runtime Overlay:
imgextract --name runtime ${uri_base}&stage=runtime&compress=gz     || goto reboot

{{if ne .KernelOverride "" -}}
echo Downloading Kernel Modules:
imgextract --name kmods ${uri_base}&stage=kmods&compress=gz         || goto reboot
{{- end}}

goto imoktogo

:nocompress

echo
echo Image extract not supported in this iPXE, using standard initrd mode

echo Downloading Container Image:
initrd --name container ${uri_base}&stage=container     || goto reboot

echo Downloading System Overlay:
initrd --name system ${uri_base}&stage=system           || goto reboot

echo Downloading Runtime Overlay:
initrd --name runtime ${uri_base}&stage=runtime         || goto reboot

{{if ne .KernelOverride "" -}}
echo Downloading Kernel Modules:
initrd --name kmods ${uri_base}&stage=kmods             || goto reboot
{{- end}}

goto imoktogo

:noefi

echo
echo Use legacy initrd mode with compressed images

echo Downloading Container Image:
initrd --name container ${uri_base}&stage=container&compress=gz || goto reboot

echo Downloading System Overlay:
initrd --name system ${uri_base}&stage=system&compress=gz       || goto reboot

echo Downloading Runtime Overlay:
initrd --name runtime ${uri_base}&stage=runtime&compress=gz     || goto reboot

{{if ne .KernelOverride "" -}}
echo Downloading Kernel Modules:
initrd --name kmods ${uri_base}&stage=kmods&compress=gz         || goto reboot
{{- end}}


:imoktogo

echo Booting in 3s...
{{if ne .KernelOverride "" -}}
echo boot kernel initrd=container initrd=kmods initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}}
sleep 3
boot kernel initrd=container initrd=kmods initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}} ||  goto reboot
{{- else -}}
echo boot kernel initrd=container initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}}
sleep 3
boot kernel initrd=container initrd=system initrd=runtime wwid={{.Hwaddr}} {{.KernelArgs}} ||  goto reboot
{{- end}}

:reboot
echo
echo There was an error, rebooting in 15s...
echo
sleep 15
reboot
