Merge "Reduce the complexity of ScreenRedfishError"
This commit is contained in:
commit
5f1eff7858
@ -39,29 +39,32 @@ func (e ErrOperationRetriesExceeded) Error() string {
|
|||||||
|
|
||||||
// ScreenRedfishError provides detailed error checking on a Redfish client response.
|
// ScreenRedfishError provides detailed error checking on a Redfish client response.
|
||||||
func ScreenRedfishError(httpResp *http.Response, clientErr error) error {
|
func ScreenRedfishError(httpResp *http.Response, clientErr error) error {
|
||||||
// NOTE(drewwalters96): clientErr may not be nil even though the request was successful. The HTTP status code
|
if httpResp == nil {
|
||||||
// has to be verified for success on each request. The Redfish client uses HTTP codes 200 and 204 to indicate
|
|
||||||
// success.
|
|
||||||
if httpResp != nil && (httpResp.StatusCode < http.StatusOK || httpResp.StatusCode > http.StatusNoContent) {
|
|
||||||
if clientErr == nil {
|
|
||||||
return ErrRedfishClient{Message: http.StatusText(httpResp.StatusCode)}
|
|
||||||
}
|
|
||||||
|
|
||||||
oAPIErr, ok := clientErr.(redfishClient.GenericOpenAPIError)
|
|
||||||
if !ok {
|
|
||||||
return ErrRedfishClient{Message: "Unable to decode client error."}
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp redfishClient.RedfishError
|
|
||||||
if err := json.Unmarshal(oAPIErr.Body(), &resp); err != nil {
|
|
||||||
// No JSON response included; use generic error text.
|
|
||||||
return ErrRedfishClient{Message: err.Error()}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ErrRedfishClient{Message: resp.Error.Message}
|
|
||||||
} else if httpResp == nil {
|
|
||||||
return ErrRedfishClient{Message: "HTTP request failed. Please try again."}
|
return ErrRedfishClient{Message: "HTTP request failed. Please try again."}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
// NOTE(drewwalters96): clientErr may not be nil even though the request was successful. The HTTP status code
|
||||||
|
// has to be verified for success on each request. The Redfish client uses HTTP codes 200 and 204 to indicate
|
||||||
|
// success.
|
||||||
|
if httpResp.StatusCode >= http.StatusOK && httpResp.StatusCode <= http.StatusNoContent {
|
||||||
|
// This range of status codes indicate success
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if clientErr == nil {
|
||||||
|
return ErrRedfishClient{Message: http.StatusText(httpResp.StatusCode)}
|
||||||
|
}
|
||||||
|
|
||||||
|
oAPIErr, ok := clientErr.(redfishClient.GenericOpenAPIError)
|
||||||
|
if !ok {
|
||||||
|
return ErrRedfishClient{Message: "Unable to decode client error."}
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp redfishClient.RedfishError
|
||||||
|
if err := json.Unmarshal(oAPIErr.Body(), &resp); err != nil {
|
||||||
|
// No JSON response included; use generic error text.
|
||||||
|
return ErrRedfishClient{Message: err.Error()}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ErrRedfishClient{Message: resp.Error.Message}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user