Files
napalm-redfish/CHANGELOG.md
T
Christian Manivong e9ad7951cd feat: a bmc driver that takes the best of Redfish and IPMI (0.4.0)
bmc (napalm_redfish.bmc:BmcDriver) reads a BMC over Redfish where it
answers. A BMC that refuses Redfish (no license) is read and switched over
IPMI. A getter that fails over Redfish is asked over IPMI where IPMI has it;
IPMI is opened only then. Power control goes over Redfish when it answers,
and a refusal is final. The BMC is reset over Redfish only. Same account
for both; ipmi_port in optional_args.

Discovery suggests bmc for a BMC it finds: the fingerprint rules moved from
RedfishDriver to BmcDriver.
2026-10-17 10:34:20 +02:00

7.0 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.4.0] - 2026-10-17

Added

  • bmc NAPALM driver (napalm_redfish.bmc:BmcDriver): the best of Redfish and IPMI for one BMC, chosen by itself. It reads over Redfish where the BMC answers. A BMC that refuses Redfish altogether (no license) is read and switched over IPMI, and a getter that fails over Redfish is asked over IPMI where IPMI has it; IPMI is opened only then. Power control goes over Redfish when it answers. A refusal by the BMC is not retried over IPMI. The BMC itself is reset over Redfish only. get_device_warnings adds ipmi_fallback to bmc_license_required while it reads over IPMI. get_management_protocols over IPMI reports IPMI over LAN on, the one thing it knows. Same account for both; ipmi_port (623) in optional_args.

Changed

  • Discovery suggests bmc for a BMC it finds: the fingerprint rules and the probed /redfish/v1/ path moved from RedfishDriver to BmcDriver (BMC_PORT_SPECS, BMC_HTTP_FINGERPRINT). redfish stays for choosing by hand.

[0.3.1] - 2026-10-17

First run against real hardware over Redfish: a Supermicro X10DRL-i (BMC 3.91) with the SFT-OOB-LIC license only, recorded under tests/fixtures/supermicro-x10drl-i-3.91/redfish/.

Fixed

  • A resource the BMC refuses for want of a further license (403 OemLicenseNotPassed) no longer fails the whole getter. The transport raises RedfishFeatureLicenseError (a RedfishAuthError); get_hardware_inventory reads the drives from SimpleStorage instead of a withheld Storage, and get_firmware_inventory falls back to the BMC firmware (Managers/{id}) and the BIOS (Systems/{id}.BiosVersion) when UpdateService is withheld.
  • The model of a system that reports a placeholder ("Super Server" on Supermicro) is the board: the system's PartNumber, else the chassis model.

Added

  • get_device_warnings reports bmc_license_partial with the licenses the BMC names and the parts it withholds (drives, firmware inventory).

[0.3.0] - 2026-10-17

Added

  • IpmiDriver.set_power_state: the server's power over IPMI chassis control (On, GracefulShutdown, ForceOff, ForceRestart). get_power_state now offers those the server accepts in its state (On when off, the other three when on). IPMI has no graceful restart, and pyghmi offers no power cycle; neither is offered. The driver still does not reset the BMC. This is for boards that offer nothing but IPMI, such as a Supermicro X10 without a Redfish license.

[0.2.1] - 2026-10-13

Added

  • IpmiDriver and RedfishDriver mix in HealthMetricsMixin: netOrk's SNMP health poll reads the BMC's own load, memory and interfaces (UCD-MIB) where the BMC runs net-snmp, as the Supermicro X10's does. The role base stays without it.

Fixed

  • IpmiDriver: the second poll of a BMC in the same process failed with '<' not supported between instances of 'float' and 'NoneType'. pyghmi files a session in Session.initting_sessions under the credentials as str but deletes it only under bytes, so the next Command got the old, logged-out session back. The driver drops that entry itself before open() and after close(). Reproduced and verified live against a Supermicro X10DRL-i (three polls in one process).

[0.2.0] - 2026-10-13

Added

  • ipmi NAPALM driver (IpmiDriver) on ManagementControllerDriver, read-only, over IPMI 2.0 with pyghmi: facts and inventory from the FRU (manufacturer, product, serial number, system UUID), the BMC's LAN interface, temperatures, fans and power supplies from the sensor records, the power state, the system event log and the BMC firmware version. No power control and no BMC reset. For BMCs that refuse or lack Redfish; IPMI over LAN leaks password hashes (CVE-2013-4786), so it is the fallback, not the main path.
  • Recorded IPMI fixtures from a Supermicro X10DRL-i (BMC 3.91).

Changed

  • A BMC that refuses Redfish for want of a vendor license no longer fails open(). get_facts returns what is known without Redfish, get_device_warnings reports bmc_license_required with the licenses the BMC names, and every other getter raises ConnectionException. A poll therefore reports the missing license instead of an offline BMC.

[0.1.2] - 2026-10-13

Fixed

  • The fingerprint rules are grouped into alternatives (one Redfish answer, one landing page), so discovery's maximum for this driver is 21, not 41. With every alternative summed, a Supermicro landing page (6 of 41) lost to a bare "linux" in the BMC's own SNMP sysDescr (5 of 18). Requires napalm-device-types 4.8.

[0.1.1] - 2026-10-13

Fixed

  • Discovery no longer takes every device with an open HTTPS port for a BMC: the PortSpec for 443 carries no weight, so a switch's web UI scores nothing.
  • A BMC that refuses Redfish for want of a vendor license (Supermicro X10 without SUM, DCMS or OOB answers even GET /redfish/v1/ with 403 OemLicenseNotPassed) now fails open() with RedfishLicenseError naming the licenses, not with a bare status code.

Added

  • Fingerprint rules for the BMC web UIs netOrk's discovery already fetches: Supermicro X9-X11 (ATEN firmware), iDRAC, iLO. A rule for a Redfish error body (@message.extendedinfo) for when discovery reads the service root.
  • Recorded fixtures from a Supermicro X10DRL-i (BMC 3.91, unlicensed).

[0.1.0] - 2026-10-13

Added

  • redfish NAPALM driver (RedfishDriver) on ManagementControllerDriver from napalm-device-types 4.7, registered as the napalm.drivers entry point redfish
  • NAPALM getters for the BMC: get_facts, get_interfaces, get_interfaces_ip, get_environment (fans, temperatures, power supplies; cpu and memory empty), get_users, get_ntp_servers, get_snmp_information
  • Role methods for the managed server: get_power_state, set_power_state, get_hardware_inventory, get_event_log, get_firmware_inventory, get_management_protocols; reboot_host resets the BMC (Manager.Reset)
  • HTTPS transport on the DMTF redfish library: Redfish session login with the session deleted on close, basic auth fallback only when sessions are unsupported, certificate verification on by default (verify_ssl accepts a CA file), collections followed by @odata.id including nextLink pages, links to other hosts refused
  • Environment from ThermalSubsystem/PowerSubsystem/Sensors where present, legacy Thermal/Power otherwise
  • Pure parsers for every resource in docs/redfish-map.md
  • Tests against DMTF Redfish mockups (public-rackmount1, public-localstorage, public-telemetry) over mocked HTTP

Known limitations

  • Not yet run against real hardware; Supermicro X10 behaviour is from the design notes
  • No ipmi fallback driver yet
  • get_config is not implemented (a BMC has no configuration file)