Skip to content

bug: Supermicro GB300 "GB NVL" misclassification stalls HostInitializing #5848

Description

@williampnvidia

Version

Affected versions:

  • v2.1.0-rc.19 through v2.1.0-rc.21 — libredfish v0.47.3
  • v2.2.0-rc.1 — libredfish v0.47.3
  • Current main — libredfish v0.47.4

v2.1.0-rc.18, which uses libredfish v0.46.5, works.

Describe the bug

Supermicro GB300 trays with the Redfish model GB NVL become stuck in:

HostInitializing/WaitingForPlatformConfiguration

During machine_setup, libredfish incorrectly selects the non-Supermicro BIOS attributes and sends:

PATCH /redfish/v1/Systems/System_0/Bios/Settings

including:

{
  "Attributes": {
    "TPM": "Enabled",
    "EmbeddedUefiShell": "Disabled"
  }
}

The Supermicro GB300 BIOS does not expose TPM or EmbeddedUefiShell; it uses SecurityDeviceSupport for TPM control. The BMC rejects the request:

HTTP 400 Bad Request
Base.1.18.1.PropertyValueNotInList
The value 'EmbeddedUefiShell' for the property Attributes is not in the list of acceptable values.

NICo handles the machine_setup failure as a possible UEFI-POST/BMC race and enters its host reboot/retry path. BiosConfigOutcome::WaitingForReboot returns Wait without advancing the BIOS configuration stage or its retry counter.

The generic reboot helper eventually reports that manual intervention is required, but the machine does not transition to a terminal failed state. It remains in HostInitializing/WaitingForPlatformConfiguration, exceeding its SLA while the controller continues processing the same failure.

Root cause

libredfish v0.46.5 classified GB300 by checking whether any member of /redfish/v1/Systems had a model containing GB300:

systems.members.iter().any(|system| {
    system
        .model
        .as_deref()
        .is_some_and(|model| model.contains("GB300"))
})

dsx-ai-factory/libredfish#129 changed this to require Manufacturer: Supermicro and a model containing GB300 on the same ComputerSystem record:

systems.iter().any(|system| {
    system
        .manufacturer
        .as_deref()
        .is_some_and(|manufacturer| manufacturer.eq_ignore_ascii_case("supermicro"))
        && system
            .model
            .as_deref()
            .is_some_and(|model| model.contains("GB300"))
})

The affected tray splits this information across Redfish system records:

  • Host system: Manufacturer: Supermicro, Model: GB NVL
  • HGX system: model contains GB300, but its manufacturer is not Supermicro

No single record satisfies both parts of the new predicate. Consequently, systems_are_supermicro_gb300() returns false and machine_setup selects the wrong BIOS attributes.

The change was introduced in libredfish v0.47.1 and is present in v0.47.3 and v0.47.4. NICo release v2.1.0-rc.19 picked it up when #5755 changed the libredfish pin from v0.46.5 to v0.47.3.

Expected behavior

Supermicro GB300 trays should be identified from the complete /Systems collection and configured with:

{
  "Attributes": {
    "SecurityDeviceSupport": "Enabled"
  }
}

They should not receive TPM or EmbeddedUefiShell.

Suggested fix

Evaluate the manufacturer and GB300 model independently across the complete system collection:

let is_supermicro = systems.iter().any(|system| {
    system
        .manufacturer
        .as_deref()
        .is_some_and(|value| value.eq_ignore_ascii_case("supermicro"))
});

let is_gb300 = systems.iter().any(|system| {
    system
        .model
        .as_deref()
        .is_some_and(|value| value.contains("GB300"))
});

is_supermicro && is_gb300

Add a regression test representing the actual split-system metadata:

  • System_0: Supermicro / GB NVL
  • HGX system: model containing GB300

Publish a corrected libredfish version and update the v2.1 and v2.2/main pins.

Scope

This affects Supermicro GB300 trays with this Redfish system layout whenever they enter a provisioning flow that calls machine_setup.

Hosts already settled in Assigned/Ready are not immediately affected because that path does not normally call machine_setup.

NICo's BMC Explorer mapping is already correct: the Supermicro GB300 infinite-boot attribute is None, and its expected BIOS attributes exclude TPM and EmbeddedUefiShell. That independent classification does not control libredfish's later machine_setup path.

Interim workaround

Pin NICo to v2.1.0-rc.18, the last v2.1 release candidate using libredfish v0.46.5.

Related work

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugA defect in existing software (deprecated - use issue type, but it's needed for reporting now)

Type

No type

Fields

Priority

High

Target date

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions