From b3ce6acd679d1081cc2fee5f128023d9a6cfe794 Mon Sep 17 00:00:00 2001 From: Erez Kirson Date: Tue, 23 Jun 2026 12:02:47 +0300 Subject: [PATCH] fix(dell): match DPU HTTP boot option by name prefix, not exact equality set_boot_order_dpu_first / is_boot_order_setup / machine_setup_status all compared the expected boot option name "HTTP Device 1: {DeviceDescription}" for *exact* equality against the boot option display_name. On Dell iDRAC the real name has a suffix, e.g.: "HTTP Device 1: NIC in Slot 40 Port 1 Partition 1 - Nvidia Network Adapter - C4:70:BD:2C:3C:0A - IPv4" so exact ==/!= never matches: set fails with MissingBootOption, and the verify path (is_boot_order_setup) reports the order unconfigured. Downstream (NICo) this wedges host provisioning at SetBootOrder/CheckBootOrder. Match by prefix (starts_with) in all three places. Verified on a live BlueField-3 + Dell PowerEdge XE9680 (iDRAC): the set fix advanced the state SetBootOrder -> CheckBootOrder, and the verify fix clears CheckBootOrder. Co-Authored-By: Claude Opus 4.8 --- src/dell.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dell.rs b/src/dell.rs index fcb466705..5b400211f 100644 --- a/src/dell.rs +++ b/src/dell.rs @@ -429,7 +429,7 @@ impl Redfish for Bmc { let (expected, actual) = self .get_expected_and_actual_first_boot_option(crate::BootInterfaceRef::Mac(mac)) .await?; - if expected.is_none() || expected != actual { + if !matches!((&expected, &actual), (Some(e), Some(a)) if a.starts_with(e)) { diffs.push(MachineSetupDiff { key: "boot_first".to_string(), expected: expected.unwrap_or_else(|| "Not found".to_string()), @@ -1146,7 +1146,7 @@ impl Redfish for Bmc { .await?; let boot_order = self.get_boot_order().await?; for (idx, boot_option) in boot_order.iter().enumerate() { - if boot_option.display_name == expected_boot_option_name { + if boot_option.display_name.starts_with(&expected_boot_option_name) { if idx == 0 { // Dells will not generate a bios config job below if the boot orders already configured correctly tracing::info!( @@ -1358,7 +1358,7 @@ impl Redfish for Bmc { let (expected, actual) = self .get_expected_and_actual_first_boot_option(boot_interface) .await?; - Ok(expected.is_some() && expected == actual) + Ok(matches!((&expected, &actual), (Some(e), Some(a)) if a.starts_with(e))) }) }