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)
|
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
|
var temp []map[string]any
|
||||||
for _, system := range systems {
|
if systems == nil {
|
||||||
interfaces, err := CollectEthernetInterfaces(c, q, system.ID)
|
url := baseRedfishUrl(q) + "/Systems"
|
||||||
|
res, body, err := util.MakeRequest(nil, url, "GET", nil, nil)
|
||||||
if err != 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 {
|
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}
|
data := map[string]any{"Systems": temp}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue