Files
napalm-redfish/CHANGELOG.md
T
Christian Manivong 8dac2e67dd
driver / standard (pull_request) Successful in 13s
driver / lint (pull_request) Successful in 11s
driver / types (pull_request) Successful in 46s
driver / test (3.10) (pull_request) Successful in 51s
driver / test (3.11) (pull_request) Successful in 55s
driver / test (3.12) (pull_request) Successful in 49s
driver / test (3.13) (pull_request) Successful in 43s
driver / lowest (pull_request) Successful in 26s
driver / security (pull_request) Successful in 49s
driver / build (pull_request) Successful in 22s
CI / driver (pull_request) Successful in 6m5s
driver / publish (pull_request) Skipped
chore: adopt the NAPALM driver standard
- CI arrives in .gitea/workflows/ci.yml and calls the shared driver
  workflow of NAPALM/driver-standard; the repo had none before.
- setuptools>=77 and the SPDX license string PEP 639 wants, without the
  License classifier; py.typed; Repository, Issues and Changelog links on
  git.netork.io; napalm-device-types>=4.21.1 from PyPI.
- True floors, found by running the tests at them: redfish>=3.4.1 (older
  releases return no response with max_retry=0) and pyghmi>=1.5.1 (1.5.0
  imports python-dateutil without declaring it).
- The test extra becomes the dev extra of the standard, plus responses,
  which the tests mock the BMC with. pytest puts the repo root on the
  path, so tests.conftest also imports under a bare pytest.
- mypy strict; exempt for now (50 errors, most of them getters returning
  dicts where the role declares TypedDicts): napalm_redfish.bmc, .driver,
  .ipmi, .transport and parsers.common, .environment, .manager, .system.
  They are recorded in tests/quality_baseline.json with seven functions
  over complexity 10.
- Coverage floor 94 % (measured 94.27 %).
- The README's development steps install from PyPI.
2026-10-23 08:46:19 +02:00

164 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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]
### Changed
- The driver follows the NAPALM driver standard
(https://git.netork.io/NAPALM/driver-standard): CI on Gitea runs ruff, mypy, the
tests on Python 3.10–3.13 and at the lowest declared versions, bandit, pip-audit and
a build check, and a release tag publishes to PyPI. Python 3.10 stays the floor; the
package now ships `py.typed`, and the license is declared as the SPDX string
`Apache-2.0`. napalm-device-types now comes from PyPI (4.21.1 or later).
- Requires redfish 3.4.1 and pyghmi 1.5.1: older redfish releases return no answer
with `retries=0`, and pyghmi 1.5.0 misses a dependency it imports.
- A failed IPMI logout on close is now logged at debug level.
## [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)