mirror of
https://github.com/davidallendj/magellan.git
synced 2025-12-20 11:37:01 -07:00
Added extra check and work around if system returns nil
This commit is contained in:
parent
66bf6e0557
commit
477bbdeece
1 changed files with 77 additions and 11 deletions
|
|
@ -435,22 +435,88 @@ func CollectSystems(c *gofish.APIClient, q *QueryParams) ([]byte, error) {
|
|||
return nil, fmt.Errorf("failed to query systems (%v:%v): %v", q.Host, q.Port, err)
|
||||
}
|
||||
|
||||
// query the system's ethernet interfaces
|
||||
// do manual requests if systems is empty to only get necessary info as last resort
|
||||
// /redfish/v1/Systems
|
||||
// /redfish/v1/Systems/Members
|
||||
// /redfish/v1/Systems/
|
||||
var temp []map[string]any
|
||||
for _, system := range systems {
|
||||
interfaces, err := CollectEthernetInterfaces(c, q, system.ID)
|
||||
if systems == nil {
|
||||
url := baseRedfishUrl(q) + "/Systems"
|
||||
res, body, err := util.MakeRequest(nil, url, "GET", nil, nil)
|
||||
if err != nil {
|
||||
continue
|
||||
return nil, fmt.Errorf("failed to make request: %v", err)
|
||||
} else if res.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("request returned status code %d", res.StatusCode)
|
||||
}
|
||||
var i map[string]any
|
||||
err = json.Unmarshal(interfaces, &i)
|
||||
|
||||
// sweet syntatic sugar type aliases
|
||||
type System = map[string]any
|
||||
type Member = map[string]string
|
||||
|
||||
// get all the systems
|
||||
var (
|
||||
tempSystems System
|
||||
interfaces []*redfish.EthernetInterface
|
||||
errList []error
|
||||
)
|
||||
err = json.Unmarshal(body, &tempSystems)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal interface: %v", err)
|
||||
return nil, fmt.Errorf("failed to unmarshal systems: %v", err)
|
||||
}
|
||||
|
||||
// then, get all the members within a system
|
||||
members, ok := tempSystems["Members"]
|
||||
if ok {
|
||||
for _, member := range members.([]Member) {
|
||||
id, ok := member["@odata.id"]
|
||||
if ok {
|
||||
// /redfish/v1/Systems/Self (or whatever)
|
||||
// memberEndpoint := fmt.Sprintf("%s%s", url, id)
|
||||
// res, body, err := util.MakeRequest(nil, baseRedfishUrl(q)+memberEndpoint, http.MethodGet, nil, nil)
|
||||
// if err != nil {
|
||||
// continue
|
||||
// } else if res.StatusCode != http.StatusOK {
|
||||
// continue
|
||||
// }
|
||||
// TODO: extract EthernetInterfaces from Systems then query
|
||||
|
||||
// get all of the ethernet interfaces in our systems
|
||||
ethernetInterface, err := redfish.ListReferencedEthernetInterfaces(c, id+"/EthernetInterfaces/")
|
||||
if err != nil {
|
||||
errList = append(errList, err)
|
||||
continue
|
||||
}
|
||||
interfaces = append(interfaces, ethernetInterface...)
|
||||
}
|
||||
}
|
||||
i, err := json.Marshal(interfaces)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal interface: %v", err)
|
||||
}
|
||||
temp = append(temp, map[string]any{
|
||||
"Data": nil,
|
||||
"EthernetInterfaces": string(i),
|
||||
})
|
||||
}
|
||||
|
||||
} else {
|
||||
// query the system's ethernet interfaces
|
||||
// var temp []map[string]any
|
||||
for _, system := range systems {
|
||||
interfaces, err := CollectEthernetInterfaces(c, q, system.ID)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
var i map[string]any
|
||||
err = json.Unmarshal(interfaces, &i)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to unmarshal interface: %v", err)
|
||||
}
|
||||
temp = append(temp, map[string]any{
|
||||
"Data": system,
|
||||
"EthernetInterfaces": i["EthernetInterfaces"],
|
||||
})
|
||||
}
|
||||
temp = append(temp, map[string]any{
|
||||
"Data": system,
|
||||
"EthernetInterfaces": i["EthernetInterfaces"],
|
||||
})
|
||||
}
|
||||
|
||||
data := map[string]any{"Systems": temp}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue