randomparity / randomparity/kdive
Add the IPMI out-of-band driver
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- Avg merge
- 1h 26m
- Merged PRs (30d)
- 311
Description
Part of #1814
## Problem
Redfish (#1818) is the modern service-processor standard, but a large share of lab hardware
predates it or ships a BMC whose Redfish implementation is incomplete. IPMI remains the lowest
common denominator for x86 out-of-band control, and a BYO provider that cannot talk to it excludes
much of the hardware operators actually have.
## Evidence
- `src/kdive/providers/byo_host/oob/` — the typed driver protocol defined in #1818; this is a
second implementation behind it, purely additive.
- `docs/design/top-level-design.md:581` scopes M4 bare metal as "PXE/SoL/IPMI/Redfish" — IPMI is
named in the roadmap alongside Redfish, not as an afterthought.
- The `[byo_host.oob]` block from #1817 already carries `kind = "ipmi"` as a selectable value, so
no schema change is needed here.
- Parallelizable with the HMC driver (#1814 entry 6): different transport, different hardware, no
shared files beyond the port.
## Expected outcome
- An IPMI driver satisfying the #1818 port: power on/off/reset, state query, and SoL console
attach.
- Same fail-closed contract as Redfish — unreachable endpoint or rejected credential raises a
specific `ErrorCategory`; no silent in-band fallback.
- Credentials resolved by reference and registered for redaction, identical to the Redfish path.
- Any host-side tooling the driver shells out to is declared in the owning Ansible role in this
same PR (AGENTS.md provisioning-parity rule) — an undeclared dep passes on a warmed dev box and
breaks the next clean runner reprovision.
- Unit/contract tests against a mock IPMI endpoint; no live BMC required to merge.
Blocked by #1818
Contributor guide
Research direction
Start with the typed driver protocol in src/kdive/providers/byo_host/oob/ and the design scope in docs/design/top-level-design.md:581, after #1818 is complete. Use the Redfish path as the stated parallel implementation, then add mock IPMI contract tests covering power, state, SoL, fail-closed errors, credential redaction, and any declared Ansible tooling; done means no live BMC is required and the listed outcomes pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- infrastructure
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100