feat: read-only IPMI driver; report a missing Redfish license (0.2.0)

A Supermicro X10DRL-i refuses Redfish without a license (SUM, DCMS or
OOB), even the service root. IPMI answers without one.

- New entry point `ipmi` (napalm_redfish.ipmi.IpmiDriver) on
  ManagementControllerDriver, over pyghmi: facts and inventory from the
  FRU (serial number, system UUID), the BMC's LAN interface, sensors
  (temperatures, fans, power supplies), the power state, the event log
  and the BMC firmware. Read-only: no power control, no BMC reset.
  Tested against recordings of the X10 with serials, the UUID, MACs and
  IPs replaced.
- RedfishDriver.open() no longer fails on a license refusal: get_facts
  returns what is known without Redfish, get_device_warnings reports
  bmc_license_required with the licenses the BMC names, every other
  getter raises. netOrk then shows the reason instead of an offline BMC.
- IpmiDriver is not exported from the package: NAPALM's own
  get_network_driver("redfish") takes the first driver class of
  napalm_redfish.
This commit is contained in:
christianmanivong committed 2026-10-13 10:53:51 +02:00
1 parent bfbeb19255
commit 332e6090a7
17 files changed
+1194 -19

No files matched your search

+18
View File
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [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