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>
34 lines
886 B
Go
34 lines
886 B
Go
package redfishprofile
|
|
|
|
func amiProfile() Profile {
|
|
return staticProfile{
|
|
name: "ami-family",
|
|
priority: 10,
|
|
safeForFallback: true,
|
|
matchFn: func(s MatchSignals) int {
|
|
score := 0
|
|
if containsFold(s.ServiceRootVendor, "ami") || containsFold(s.ServiceRootProduct, "ami") {
|
|
score += 70
|
|
}
|
|
for _, ns := range s.OEMNamespaces {
|
|
if containsFold(ns, "ami") {
|
|
score += 30
|
|
break
|
|
}
|
|
}
|
|
return min(score, 100)
|
|
},
|
|
extendAcquisition: func(plan *AcquisitionPlan, _ MatchSignals) {
|
|
addPlanPaths(&plan.SeedPaths,
|
|
"/redfish/v1/Oem/Ami",
|
|
"/redfish/v1/Oem/Ami/InventoryData/Status",
|
|
)
|
|
ensurePrefetchEnabled(plan, true)
|
|
addPlanNote(plan, "ami-family acquisition extensions enabled")
|
|
},
|
|
applyAnalysisDirectives: func(d *AnalysisDirectives, _ MatchSignals) {
|
|
d.EnableGenericGraphicsControllerDedup = true
|
|
},
|
|
}
|
|
}
|