summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Higgins <derekh@redhat.com>2021-09-29 11:31:59 +0100
committerJulia Kreger <juliaashleykreger@gmail.com>2022-08-01 17:26:49 -0700
commitfb73bdf10501f25b8ed29c23b865c58ed4cb10b7 (patch)
tree730c87ca575a8df92f212e838dae14fd7c781129
parent45c9c3029f5363b6e24e578648c09213a7338db1 (diff)
downloadironic-fb73bdf10501f25b8ed29c23b865c58ed4cb10b7.tar.gz
Exit ipxe script if enable_netboot_fallback failed
The sanboot trick to boot from local disk does not work on all hardware. If it fails exit 0 from the iPxe script so that boot continues on the next device which may be the local disk. Story: #2009258 Task: #43470 Change-Id: I1b6303a987a102dfbfd233334395321c25a55212
-rw-r--r--ironic/drivers/modules/boot.ipxe6
-rw-r--r--ironic/drivers/modules/ipxe_config.template2
-rw-r--r--ironic/tests/unit/drivers/boot-fallback.ipxe6
-rw-r--r--ironic/tests/unit/drivers/boot.ipxe6
-rw-r--r--ironic/tests/unit/drivers/ipxe_config.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_anaconda.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_iso.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_ramdisk.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_volume_extra_volume.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_volume_multipath.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_boot_from_volume_no_extra_volumes.template2
-rw-r--r--ironic/tests/unit/drivers/ipxe_config_timeout.template2
-rw-r--r--releasenotes/notes/version-foo-2eb39b768112547f.yaml6
13 files changed, 33 insertions, 9 deletions
diff --git a/ironic/drivers/modules/boot.ipxe b/ironic/drivers/modules/boot.ipxe
index 4ed58497c..95d95686a 100644
--- a/ironic/drivers/modules/boot.ipxe
+++ b/ironic/drivers/modules/boot.ipxe
@@ -10,6 +10,12 @@ isset ${net${netid}/mac} || goto loop_done
echo Attempting to boot from MAC ${net${netid}/mac:hexhyp}
chain {{ ipxe_for_mac_uri }}${net${netid}/mac:hexhyp} || goto loop
+# If we've got here the chained config returned success
+# suggesting "sanboot" in boot_whole_disk failed (some UEFI cases)
+# exit 0 so the bios continues to the next device
+echo Exiting pxe config to allow boot to continue on next device
+exit 0
+
:loop_done
{% if ipxe_fallback_script -%}
chain {{ ipxe_fallback_script }} | goto boot_failed
diff --git a/ironic/drivers/modules/ipxe_config.template b/ironic/drivers/modules/ipxe_config.template
index bca63c982..7f348bb2f 100644
--- a/ironic/drivers/modules/ipxe_config.template
+++ b/ironic/drivers/modules/ipxe_config.template
@@ -72,4 +72,4 @@ goto boot_iscsi
{%- endif %}
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/boot-fallback.ipxe b/ironic/tests/unit/drivers/boot-fallback.ipxe
index bf8ab414c..ada2646a6 100644
--- a/ironic/tests/unit/drivers/boot-fallback.ipxe
+++ b/ironic/tests/unit/drivers/boot-fallback.ipxe
@@ -10,6 +10,12 @@ isset ${net${netid}/mac} || goto loop_done
echo Attempting to boot from MAC ${net${netid}/mac:hexhyp}
chain pxelinux.cfg/${net${netid}/mac:hexhyp} || goto loop
+# If we've got here the chained config returned success
+# suggesting "sanboot" in boot_whole_disk failed (some UEFI cases)
+# exit 0 so the bios continues to the next device
+echo Exiting pxe config to allow boot to continue on next device
+exit 0
+
:loop_done
chain inspector.ipxe | goto boot_failed
diff --git a/ironic/tests/unit/drivers/boot.ipxe b/ironic/tests/unit/drivers/boot.ipxe
index aa8ee9e51..006bcb4aa 100644
--- a/ironic/tests/unit/drivers/boot.ipxe
+++ b/ironic/tests/unit/drivers/boot.ipxe
@@ -10,6 +10,12 @@ isset ${net${netid}/mac} || goto loop_done
echo Attempting to boot from MAC ${net${netid}/mac:hexhyp}
chain pxelinux.cfg/${net${netid}/mac:hexhyp} || goto loop
+# If we've got here the chained config returned success
+# suggesting "sanboot" in boot_whole_disk failed (some UEFI cases)
+# exit 0 so the bios continues to the next device
+echo Exiting pxe config to allow boot to continue on next device
+exit 0
+
:loop_done
echo PXE boot failed! No configuration found for any of the present NICs.
echo Press any key to reboot...
diff --git a/ironic/tests/unit/drivers/ipxe_config.template b/ironic/tests/unit/drivers/ipxe_config.template
index 70f8a03f1..86e8fe36b 100644
--- a/ironic/tests/unit/drivers/ipxe_config.template
+++ b/ironic/tests/unit/drivers/ipxe_config.template
@@ -44,4 +44,4 @@ initrd http://1.2.3.4:1234/ramdisk || goto boot_ramdisk
boot
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_anaconda.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_anaconda.template
index 7963b3883..08e377899 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_anaconda.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_anaconda.template
@@ -44,4 +44,4 @@ initrd http://1.2.3.4:1234/ramdisk || goto boot_ramdisk
boot
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_iso.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_iso.template
index c7133c7b6..7e4c83640 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_iso.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_iso.template
@@ -42,4 +42,4 @@ imgfree
sanboot http://1.2.3.4:1234/uuid/iso
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_ramdisk.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_ramdisk.template
index 70f8a03f1..86e8fe36b 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_ramdisk.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_ramdisk.template
@@ -44,4 +44,4 @@ initrd http://1.2.3.4:1234/ramdisk || goto boot_ramdisk
boot
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_extra_volume.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_extra_volume.template
index 0a872804a..bab0d879c 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_extra_volume.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_extra_volume.template
@@ -62,4 +62,4 @@ sleep 10
goto boot_iscsi
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_multipath.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_multipath.template
index 571216e39..2ab084b9d 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_multipath.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_multipath.template
@@ -59,4 +59,4 @@ sleep 10
goto boot_iscsi
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_no_extra_volumes.template b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_no_extra_volumes.template
index 6b7a4394d..12b025f87 100644
--- a/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_no_extra_volumes.template
+++ b/ironic/tests/unit/drivers/ipxe_config_boot_from_volume_no_extra_volumes.template
@@ -59,4 +59,4 @@ sleep 10
goto boot_iscsi
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/ironic/tests/unit/drivers/ipxe_config_timeout.template b/ironic/tests/unit/drivers/ipxe_config_timeout.template
index 2458f010b..97a690801 100644
--- a/ironic/tests/unit/drivers/ipxe_config_timeout.template
+++ b/ironic/tests/unit/drivers/ipxe_config_timeout.template
@@ -44,4 +44,4 @@ initrd --timeout 120 http://1.2.3.4:1234/ramdisk || goto boot_ramdisk
boot
:boot_whole_disk
-sanboot --no-describe
+sanboot --no-describe || exit 0
diff --git a/releasenotes/notes/version-foo-2eb39b768112547f.yaml b/releasenotes/notes/version-foo-2eb39b768112547f.yaml
new file mode 100644
index 000000000..bd0485863
--- /dev/null
+++ b/releasenotes/notes/version-foo-2eb39b768112547f.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fixes ``enable_netboot_fallback`` to cause iPXE config to exit 0
+ when "sanboot --no-describe" fails. Allowing the firmware to
+ move onto the next device in the boot order.