pkg: plugins: fix and better handle errors

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2015-12-15 17:51:48 +01:00
parent 6c0c199103
commit 4133dc2212
1 changed files with 18 additions and 3 deletions

View File

@ -131,11 +131,26 @@ func (c *Client) callWithRetry(serviceMethod string, data io.Reader, retry bool)
}
if resp.StatusCode != http.StatusOK {
remoteErr, err := ioutil.ReadAll(resp.Body)
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, &remoteError{err.Error(), serviceMethod}
return nil, &remoteError{method: serviceMethod, err: err.Error()}
}
return nil, &remoteError{string(remoteErr), serviceMethod}
// Plugins' Response(s) should have an Err field indicating what went
// wrong. Try to unmarshal into ResponseErr. Otherwise fallback to just
// return the string(body)
type responseErr struct {
Err string
}
remoteErr := responseErr{}
if err := json.Unmarshal(b, &remoteErr); err != nil {
return nil, &remoteError{method: serviceMethod, err: err.Error()}
}
if remoteErr.Err != "" {
return nil, &remoteError{method: serviceMethod, err: remoteErr.Err}
}
// old way...
return nil, &remoteError{method: serviceMethod, err: string(b)}
}
return resp.Body, nil
}