diff --git a/internal/collect.go b/internal/collect.go index f5e6480..17f7815 100644 --- a/internal/collect.go +++ b/internal/collect.go @@ -442,7 +442,6 @@ func CollectSystems(c *gofish.APIClient, q *QueryParams) ([]map[string]any, erro } var systems []map[string]any - for _, system := range rfSystems { eths, err := system.EthernetInterfaces() if err != nil { @@ -454,15 +453,21 @@ func CollectSystems(c *gofish.APIClient, q *QueryParams) ([]map[string]any, erro if q.Verbose { fmt.Printf("no system ethernet interfaces found...trying to get from managers interface\n") } - for _, managerLink := range system.ManagedBy { - // try getting ethernet interface from all managers until one is found - eths, err = redfish.ListReferencedEthernetInterfaces(c, managerLink+"/EthernetInterfaces") - if err != nil { - return nil, fmt.Errorf("failed to get system manager ethernet interfaces: %v", err) - } - if len(eths) > 0 { - break + + managedBy, err := system.ManagedBy() + if err == nil { + for _, managerLink := range system.ManagedBy { + // try getting ethernet interface from all managers until one is found + eths, err = redfish.ListReferencedEthernetInterfaces(c, managerLink+"/EthernetInterfaces") + if err != nil { + return nil, fmt.Errorf("failed to get system manager ethernet interfaces: %v", err) + } + if len(eths) > 0 { + break + } } + } else { + } } @@ -494,115 +499,6 @@ func CollectSystems(c *gofish.APIClient, q *QueryParams) ([]map[string]any, erro }) } - // 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/ - // fmt.Printf("system count: %d\n", len(systems)) - // if len(systems) == 0 { - // url := baseRedfishUrl(q) + "/Systems" - // if q.Verbose { - // fmt.Printf("%s\n", url) - // } - // res, body, err := util.MakeRequest(nil, url, "GET", nil, nil) - // if err != nil { - // 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) - // } - - // // 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 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...) - // } else { - // return nil, fmt.Errorf("no ID found for member") - // } - // if util.HasErrors(errList) { - // return nil, util.FormatErrorList(errList) - // } - // } - // 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 { - // return nil, fmt.Errorf("no members found in systems") - // } - - // } else { - // b, err := json.Marshal(systems) - // if err != nil { - // fmt.Printf("failed to marshal systems: %v", err) - // } - // fmt.Printf("systems: %v\n", string(b)) - - // // query the system's ethernet interfaces - // // var temp []map[string]any - // var errList []error - // for _, system := range systems { - // interfaces, err := CollectEthernetInterfaces(c, q, system.ID) - // if err != nil { - // errList = append(errList, fmt.Errorf("failed to collect ethernet interface: %v", err)) - // 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"], - // }) - // } - // if util.HasErrors(errList) { - // err = util.FormatErrorList(errList) - // if err != nil { - // return nil, fmt.Errorf("multiple errors occurred: %v", err) - // } - // } - // } - return systems, nil }