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.
This commit is contained in:
1 parent
adf152ee12
commit
e9ad7951cd
9 files changed
+412
-23
No files matched your search
@@ -45,3 +45,17 @@ Via `pyghmi`: device ID and FRU data for `get_facts`, sensor data repository for
|
||||
via ACPI, `ForceOff` → power down, `ForceRestart` → hard reset). IPMI has no graceful
|
||||
restart, and pyghmi offers no power cycle, so `get_power_state` never offers those two.
|
||||
No BMC reset over IPMI.
|
||||
|
||||
## Redfish and IPMI together (`bmc` entry point)
|
||||
|
||||
`BmcDriver` holds a `RedfishDriver` and an `IpmiDriver` for the same BMC and account:
|
||||
|
||||
| Situation | Used |
|
||||
|---|---|
|
||||
| Redfish answers | Redfish for every getter; IPMI is not opened |
|
||||
| A getter fails over Redfish (`RedfishError`, `ConnectionException`) | that getter over IPMI, if IPMI has it (Redfish-only getters re-raise) |
|
||||
| The service root refuses Redfish for want of a license, or Redfish does not answer | IPMI for everything; Redfish-only getters raise `NotImplementedError` |
|
||||
| `set_power_state` | Redfish when it answers; a refusal (`RuntimeError`) is final |
|
||||
| `reboot_host` | Redfish only (`Manager.Reset`) |
|
||||
| `get_management_protocols` over IPMI | `{"ipmi": {"enabled": True, "port": 623}}` |
|
||||
|
||||
Reference in new issue
Block a user