fix(parser): parse Dell iDRAC10 TSR inventory from captured Redfish walk

iDRAC10-generation TSR bundles no longer ship sysinfo_dcim_view.xml /
sysinfo_dcim_softwareidentity.xml, so the dell parser produced events but
no hardware inventory for them. These bundles instead carry
redfishidracwalk.tar.gz, a captured dump of the iDRAC's own Redfish tree.

Add vendors/redfishtree, a shared helper that reconstructs a path->document
map from a tar.gz/zip-packaged Redfish walk (vendor-independent detection:
path hint + /redfish/v1 service-root/Systems/Chassis structural check) and
replays it through the existing collector.ReplayRedfishFromRawPayloads.
vendors/dell uses it to enrich DCIM-XML-derived data (append-only, existing
dedupe passes resolve overlaps). Also register vendors/redfishwalk, a
low-confidence fallback VendorParser using the same helpers, so any other
vendor that starts shipping this kind of raw Redfish walk is picked up
automatically without a dedicated parser.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-08-11 10:49:32 +03:00
co-authored by Claude Sonnet 5
parent 6e1a8232ec
commit f599215760
9 changed files with 693 additions and 1 deletions
+48 -1
View File
@@ -58,6 +58,7 @@ When `vendor_id` and `device_id` are known but the model name is missing or gene
| `lenovo_xcc` | Lenovo XCC mini-log ZIP archives | JSON inventory + platform event logs |
| `nvidia` | HGX Field Diagnostics | GPU- and fabric-heavy diagnostic input |
| `nvidia_bug_report` | `nvidia-bug-report-*.log.gz` | dmidecode, lspci, NVIDIA driver sections |
| `redfish_walk` | Any archive carrying a captured Redfish directory-tree walk (tar.gz/zip of `<path>/index.json` docs) | Low-confidence (35) vendor-agnostic fallback; see `dell` for the first known source and `redfishtree` helper package |
| `unraid` | Unraid diagnostics/log bundles | Server and storage-focused parsing |
| `xfusion` | xFusion iBMC `tar.gz` dump / file export | AppDump + RTOSDump + LogDump merge for hardware and firmware |
| `xigmanas` | XigmaNAS plain logs | FreeBSD/NAS-oriented inventory |
@@ -216,6 +217,51 @@ and `LogDump/` trees.
---
### Dell TSR (`dell`)
**Status:** Ready (v3.0). Two inventory source generations, both handled by the same parser.
**Archive format:** TSR nested zip (`signature` + `TSR*.pl.zip`).
**Extracted data:**
- Older/DCIM-XML generation: `sysinfo_dcim_view.xml` (board/CPU/NIC/etc.), `sysinfo_dcim_softwareidentity.xml`
(firmware), `sysinfo_cim_sensor.xml` (sensors), `curr_lclog.xml` (Lifecycle Controller events),
`tsr/metadata.json` (board identity fallback).
- iDRAC10-generation: same `metadata.json`/`curr_lclog.xml`, but no DCIM-XML files — instead
`tsr/hardware/sysinfo/inventory/redfishidracwalk.tar.gz` holds a captured Redfish directory-tree
walk. Parsed via the shared `redfishtree` helper package and replayed through
`collector.ReplayRedfishFromRawPayloads` (`internal/parser/vendors/dell/redfish_walk.go`), then
append-merged into the same `Hardware`/`Sensors`/`FRU`/`Events` slices the DCIM-XML path fills, so
the existing dedupe passes resolve any overlap in favor of DCIM-derived data. See ADL-048.
---
### Generic Redfish walk fallback (`redfish_walk`)
**Status:** Ready (v1.0.0).
**Confidence:** 35 (above the `generic` fallback's 15, below every dedicated vendor parser — wins
`Detect()` only when no dedicated parser also recognizes the archive).
**Purpose:** Vendor-agnostic catch-all for any archive that carries a captured Redfish
directory-tree walk (one JSON document per resource, e.g.
`redfish/v1/Systems/System.Embedded.1/index.json`) but isn't otherwise claimed by a dedicated vendor
parser. First known source is Dell iDRAC10 TSR bundles (handled directly by `dell`, see above); this
exists so any other vendor shipping the same kind of raw Redfish walk is picked up automatically.
**Detection (`internal/parser/vendors/redfishtree`):** two-step, vendor-independent —
1. Path hint: an archive member path containing `redfish` and ending in `.tar.gz`/`.tgz`/`.zip`.
2. Structural confirmation: the unpacked tree must contain a document whose own `@odata.id` is
exactly `/redfish/v1`, plus a `/redfish/v1/Systems` or `/redfish/v1/Chassis` collection.
Documents are keyed by their own `@odata.id`, not the on-disk directory name (some resource names
are URL-encoded on disk, e.g. `Assembly%23`, but not in the JSON payload).
**Extracted data:** whatever `collector.ReplayRedfishFromRawPayloads` produces from the replayed
tree — board identity, firmware, CPUs, memory, storage, PCIe, GPUs, NICs, PSUs, sensors, events.
---
### Generic text fallback (`generic`)
**Status:** Ready (v1.0.0).
@@ -234,7 +280,8 @@ and `LogDump/` trees.
| Vendor | ID | Status | Tested on |
|--------|----|--------|-----------|
| Dell TSR | `dell` | Ready | TSR nested zip archives |
| Dell TSR | `dell` | Ready | TSR nested zip archives (DCIM-XML and iDRAC10 Redfish-walk generations) |
| Generic Redfish walk | `redfish_walk` | Ready (fallback) | Any archive with a captured Redfish tree dump |
| Reanimator Easy Bee | `easy_bee` | Ready | `bee-support-*.tar.gz` support bundles |
| HPE iLO AHS | `hpe_ilo_ahs` | Ready | iLO 6 `.ahs` exports |
| Inspur / Kaytus | `inspur` | Ready | KR4268X2 onekeylog |