Implement the full architectural plan: unified ingest.Service entry point for archive and Redfish payloads, modular redfishprofile package with composable profiles (generic, ami-family, msi, supermicro, dell, hgx-topology), score-based profile matching with fallback expansion mode, and profile-driven acquisition/analysis plans. Vendor-specific logic moved out of common executors and into profile hooks. GPU chassis lookup strategies and known storage recovery collections (IntelVROC/HA-RAID/MRVL) now live in ResolvedAnalysisPlan, populated by profiles at analysis time. Replay helpers read from the plan; no hardcoded path lists remain in generic code. Also splits redfish_replay.go into domain modules (gpu, storage, inventory, fru, profiles) and adds full fixture/matcher/directive test coverage including Dell, AMI, unknown-vendor fallback, and deterministic ordering. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package redfishprofile
|
|
|
|
func dellProfile() Profile {
|
|
return staticProfile{
|
|
name: "dell",
|
|
priority: 20,
|
|
safeForFallback: true,
|
|
matchFn: func(s MatchSignals) int {
|
|
score := 0
|
|
if containsFold(s.SystemManufacturer, "dell") || containsFold(s.ChassisManufacturer, "dell") {
|
|
score += 80
|
|
}
|
|
for _, ns := range s.OEMNamespaces {
|
|
if containsFold(ns, "dell") {
|
|
score += 30
|
|
break
|
|
}
|
|
}
|
|
if containsFold(s.ServiceRootProduct, "idrac") {
|
|
score += 30
|
|
}
|
|
return min(score, 100)
|
|
},
|
|
extendAcquisition: func(plan *AcquisitionPlan, _ MatchSignals) {
|
|
ensureRecoveryPolicy(plan, AcquisitionRecoveryPolicy{
|
|
EnableProfilePlanB: true,
|
|
})
|
|
addPlanNote(plan, "dell iDRAC acquisition extensions enabled")
|
|
},
|
|
refineAcquisition: func(resolved *ResolvedAcquisitionPlan, discovered DiscoveredResources, _ MatchSignals) {
|
|
for _, managerPath := range discovered.ManagerPaths {
|
|
if !containsFold(managerPath, "idrac") {
|
|
continue
|
|
}
|
|
addPlanPaths(&resolved.SeedPaths, managerPath)
|
|
addPlanPaths(&resolved.Plan.SeedPaths, managerPath)
|
|
addPlanPaths(&resolved.CriticalPaths, managerPath)
|
|
addPlanPaths(&resolved.Plan.CriticalPaths, managerPath)
|
|
}
|
|
},
|
|
applyAnalysisDirectives: func(d *AnalysisDirectives, _ MatchSignals) {
|
|
d.EnableGenericGraphicsControllerDedup = true
|
|
},
|
|
}
|
|
}
|