fix: dedup GPUs across multiple chassis PCIeDevice trees in Redfish collector
Supermicro HGX exposes each GPU under both Chassis/1/PCIeDevices and a dedicated Chassis/HGX_GPU_SXM_N/PCIeDevices. gpuDocDedupKey was keying by @odata.id path, so identical GPUs with the same serial were not deduplicated across sources. Now stable identifiers (serial → BDF → slot+model) take priority over path. Also includes Inspur parser improvements: NVMe model/serial enrichment from devicefrusdr.log and audit.log, RAID drive slot normalization to BP notation, PSU slot normalization, BMC/CPLD/VR firmware from RESTful version info section, and parser version bump to 1.8. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -73,6 +73,24 @@ func looksLikeStorageSerial(v string) bool {
|
||||
return hasLetter && hasDigit
|
||||
}
|
||||
|
||||
// applyRAIDSlotSerials updates storage serial numbers using the slot→serial map
|
||||
// derived from audit.log RAID SN change events. Overwrites existing serials since
|
||||
// audit.log represents the authoritative current state after all disk replacements.
|
||||
func applyRAIDSlotSerials(hw *models.HardwareConfig, serials map[string]string) {
|
||||
if hw == nil || len(serials) == 0 {
|
||||
return
|
||||
}
|
||||
for i := range hw.Storage {
|
||||
slot := strings.TrimSpace(hw.Storage[i].Slot)
|
||||
if slot == "" {
|
||||
continue
|
||||
}
|
||||
if sn, ok := serials[slot]; ok && sn != "" {
|
||||
hw.Storage[i].SerialNumber = sn
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func applyStorageSerialFallback(hw *models.HardwareConfig, serials []string) {
|
||||
if hw == nil || len(hw.Storage) == 0 || len(serials) == 0 {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user