get_licenses (napalm-device-types LicenseMixin, 4.15) on redfish and bmc, for NetOrk/netork#1111. - A BMC that refuses Redfish altogether reports each license it names as missing, with its message. - One that answers but withholds parts reports the license with withholds, e.g. DCMS withholding drives and the firmware inventory on an X10 with only SFT-OOB-LIC. - ipmi knows no licenses. get_device_warnings keeps its two codes until netOrk derives them.
153 lines
7.7 KiB
Markdown
153 lines
7.7 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to this project will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
## [0.5.0] - 2026-10-17
|
|
|
|
### Added
|
|
- `get_licenses` (napalm-device-types `LicenseMixin`, 4.15) on `redfish` and `bmc`: the
|
|
licenses the BMC asks for, as facts (NetOrk/netork#1111). A BMC that refuses Redfish
|
|
altogether reports each license it names as `missing`, with its message. One that answers
|
|
but withholds parts reports the license with `withholds`, e.g. DCMS withholding
|
|
`drives` and `firmware inventory` on a Supermicro X10 with only SFT-OOB-LIC. `ipmi`
|
|
knows no licenses and has no `get_licenses`.
|
|
|
|
### Changed
|
|
- Requires napalm-device-types 4.15 (`LicenseDict.withholds`).
|
|
- `get_device_warnings` still reports `bmc_license_required` / `bmc_license_partial` for
|
|
callers that do not read `get_licenses` yet; it goes once netOrk derives both.
|
|
|
|
## [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)
|