feat(audit): capture IPMI FRU/Elabel, mc info and LAN on every audit

The techdump — the only place the IPMI FRU / Elabel identity (Product Name
= server model, serials, part numbers) is recorded — only ran under LiveCD.
Run it on every audit so `bee audit` on an installed host captures it too.

Also add `ipmitool mc info` and `ipmitool lan print` to the techdump, and
pin `ipmitool fru print 0` to FRU device 0 to match the Export Tools
"FRU / Elabel" editor exactly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-09-03 15:18:01 +03:00
co-authored by Claude Sonnet 5
parent 319f08ac4b
commit 76db45ee95
4 changed files with 61 additions and 5 deletions
+6 -4
View File
@@ -237,10 +237,12 @@ func readAuditSnapshot(auditJSON []byte) (schema.HardwareIngestRequest, error) {
}
func (a *App) RunAudit(runtimeMode runtimeenv.Mode, output string) (string, error) {
if runtimeMode == runtimeenv.ModeLiveCD {
if err := a.runtime.CaptureTechnicalDump(DefaultTechDumpDir); err != nil {
slog.Warn("capture technical dump", "err", err)
}
// Capture the raw techdump on every audit, not just LiveCD: it's the only
// place IPMI FRU / Elabel (server model), mc info and LAN config land, and
// downstream views (webui /topo, support bundle) expect it fresh per audit
// cycle. Best-effort — a missing tool or read-only path only warns.
if err := a.runtime.CaptureTechnicalDump(DefaultTechDumpDir); err != nil {
slog.Warn("capture technical dump", "err", err)
}
result := collector.Run(runtimeMode)
applyLatestSATStatuses(&result.Hardware, DefaultSATBaseDir, a.StatusDB)