fix: panic from invalid chassis in crawler

This commit is contained in:
David Allen 2025-06-25 15:20:09 -06:00
parent db45ca631a
commit ffe5132d8e
Signed by: towk
GPG key ID: 0430CDBE22619155

View file

@ -67,8 +67,8 @@ type Links struct {
type Power struct { type Power struct {
State string `json:"state,omitempty"` State string `json:"state,omitempty"`
Mode string `json:"mode,omitempty"` Mode string `json:"mode,omitempty"`
RestorePolicy string `json:"restore_policy"` RestorePolicy string `json:"restore_policy,omitempty"`
PowerControlIDs []string `json:"power_control_ids` PowerControlIDs []string `json:"power_control_ids,omitempty"`
} }
type InventoryDetail struct { type InventoryDetail struct {
@ -267,6 +267,8 @@ func walkSystems(rf_systems []*redfish.ComputerSystem, rf_chassis *redfish.Chass
var ( var (
managerLinks []string managerLinks []string
chassisLinks []string chassisLinks []string
power *redfish.Power
powercontrolIDs []string
) )
// get all of the links to managers // get all of the links to managers
@ -286,6 +288,19 @@ func walkSystems(rf_systems []*redfish.ComputerSystem, rf_chassis *redfish.Chass
if rf_chassis != nil { if rf_chassis != nil {
chassisLinks = append(chassisLinks, rf_chassis.ODataID) chassisLinks = append(chassisLinks, rf_chassis.ODataID)
// get power-related details from rf_chassis
power, err = rf_chassis.Power()
if err != nil {
log.Warn().Err(err).Str("id", rf_computersystem.ID).
Str("system", rf_computersystem.Name).Msg("failed to get power-related details from chassis")
}
// extract the power control odata.id resource
powercontrolIDs := []string{}
for _, rf_powercontrol := range power.PowerControl {
powercontrolIDs = append(powercontrolIDs, rf_powercontrol.ODataID)
}
} }
// convert supported reset types to []string // convert supported reset types to []string
@ -294,18 +309,6 @@ func walkSystems(rf_systems []*redfish.ComputerSystem, rf_chassis *redfish.Chass
actions = append(actions, string(action)) actions = append(actions, string(action))
} }
// get power-related details from rf_chassis
power, err := rf_chassis.Power()
if err != nil {
log.Warn().Err(err).Str("id", rf_computersystem.ID).
Str("system", rf_computersystem.Name).Msg("failed to get power-related details from chassis")
}
// extract the power control odata.id resource
powercontrolIDs := []string{}
for _, rf_powercontrol := range power.PowerControl {
powercontrolIDs = append(powercontrolIDs, rf_powercontrol.ODataID)
}
// get all of the links to the chassis // get all of the links to the chassis
system := InventoryDetail{ system := InventoryDetail{
URI: baseURI + "/redfish/v1/Systems/" + rf_computersystem.ID, URI: baseURI + "/redfish/v1/Systems/" + rf_computersystem.ID,