diff --git a/cmd/garm-cli/client/client.go b/cmd/garm-cli/client/client.go index a32801ad..a78c8342 100644 --- a/cmd/garm-cli/client/client.go +++ b/cmd/garm-cli/client/client.go @@ -47,6 +47,24 @@ type Client struct { client *resty.Client } +func (c *Client) handleError(err error, resp *resty.Response) error { + var ret error + if err != nil { + ret = fmt.Errorf("request returned error: %s", err) + } + + if resp != nil && resp.IsError() { + body := resp.Body() + if len(body) > 0 { + apiErr, decErr := c.decodeAPIError(resp.Body()) + if decErr == nil { + ret = fmt.Errorf("API returned error: %s", apiErr.Details) + } + } + } + return ret +} + func (c *Client) decodeAPIError(body []byte) (apiParams.APIErrorResponse, error) { var errDetails apiParams.APIErrorResponse if err := json.Unmarshal(body, &errDetails); err != nil { diff --git a/cmd/garm-cli/client/enterprises.go b/cmd/garm-cli/client/enterprises.go index f5d855b8..674333f8 100644 --- a/cmd/garm-cli/client/enterprises.go +++ b/cmd/garm-cli/client/enterprises.go @@ -19,8 +19,6 @@ import ( "fmt" "garm/params" - - "github.com/pkg/errors" ) func (c *Client) ListEnterprises() ([]params.Enterprise, error) { @@ -29,12 +27,8 @@ func (c *Client) ListEnterprises() ([]params.Enterprise, error) { resp, err := c.client.R(). SetResult(&enterprises). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return nil, errors.Wrap(decErr, "sending request") - } - return nil, fmt.Errorf("error fetching enterprises: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return enterprises, nil } @@ -51,12 +45,8 @@ func (c *Client) CreateEnterprise(param params.CreateEnterpriseParams) (params.E SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error creating enterprise: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Enterprise{}, err } return response, nil } @@ -67,12 +57,8 @@ func (c *Client) GetEnterprise(enterpriseID string) (params.Enterprise, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error fetching enterprise: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Enterprise{}, err } return response, nil } @@ -81,12 +67,8 @@ func (c *Client) DeleteEnterprise(enterpriseID string) error { url := fmt.Sprintf("%s/api/v1/enterprises/%s", c.Config.BaseURL, enterpriseID) resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error fetching removing enterprise: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -103,12 +85,8 @@ func (c *Client) CreateEnterprisePool(enterpriseID string, param params.CreatePo SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error creating enterprise pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -120,12 +98,8 @@ func (c *Client) ListEnterprisePools(enterpriseID string) ([]params.Pool, error) resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error listing enterprise pools: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil } @@ -137,12 +111,8 @@ func (c *Client) GetEnterprisePool(enterpriseID, poolID string) (params.Pool, er resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error fetching enterprise pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -153,12 +123,8 @@ func (c *Client) DeleteEnterprisePool(enterpriseID, poolID string) error { resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error deleting enterprise pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -175,12 +141,8 @@ func (c *Client) UpdateEnterprisePool(enterpriseID, poolID string, param params. SetBody(body). SetResult(&response). Put(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error updating enterprise pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -192,12 +154,8 @@ func (c *Client) ListEnterpriseInstances(enterpriseID string) ([]params.Instance resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error listing enterprise instances: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil } diff --git a/cmd/garm-cli/client/organizations.go b/cmd/garm-cli/client/organizations.go index 64425c7a..8858fef5 100644 --- a/cmd/garm-cli/client/organizations.go +++ b/cmd/garm-cli/client/organizations.go @@ -19,8 +19,6 @@ import ( "fmt" "garm/params" - - "github.com/pkg/errors" ) func (c *Client) ListOrganizations() ([]params.Organization, error) { @@ -29,12 +27,8 @@ func (c *Client) ListOrganizations() ([]params.Organization, error) { resp, err := c.client.R(). SetResult(&orgs). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return nil, errors.Wrap(decErr, "sending request") - } - return nil, fmt.Errorf("error fetching orgs: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return orgs, nil } @@ -51,12 +45,8 @@ func (c *Client) CreateOrganization(param params.CreateOrgParams) (params.Organi SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error creating org: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Organization{}, err } return response, nil } @@ -67,12 +57,8 @@ func (c *Client) GetOrganization(orgID string) (params.Organization, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error fetching org: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Organization{}, err } return response, nil } @@ -81,12 +67,8 @@ func (c *Client) DeleteOrganization(orgID string) error { url := fmt.Sprintf("%s/api/v1/organizations/%s", c.Config.BaseURL, orgID) resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error removing org: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -103,12 +85,8 @@ func (c *Client) CreateOrgPool(orgID string, param params.CreatePoolParams) (par SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error creating org pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -120,12 +98,8 @@ func (c *Client) ListOrgPools(orgID string) ([]params.Pool, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error listing org pools: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil } @@ -137,12 +111,8 @@ func (c *Client) GetOrgPool(orgID, poolID string) (params.Pool, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error fetching org pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -153,12 +123,8 @@ func (c *Client) DeleteOrgPool(orgID, poolID string) error { resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error deleting org pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -175,12 +141,8 @@ func (c *Client) UpdateOrgPool(orgID, poolID string, param params.UpdatePoolPara SetBody(body). SetResult(&response). Put(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error updating org pool: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -192,12 +154,8 @@ func (c *Client) ListOrgInstances(orgID string) ([]params.Instance, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error listing org instances: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil } diff --git a/cmd/garm-cli/client/repositories.go b/cmd/garm-cli/client/repositories.go index 7b68c8a5..18571a8f 100644 --- a/cmd/garm-cli/client/repositories.go +++ b/cmd/garm-cli/client/repositories.go @@ -19,8 +19,6 @@ import ( "fmt" "garm/params" - - "github.com/pkg/errors" ) func (c *Client) ListRepositories() ([]params.Repository, error) { @@ -29,12 +27,8 @@ func (c *Client) ListRepositories() ([]params.Repository, error) { resp, err := c.client.R(). SetResult(&repos). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return nil, errors.Wrap(decErr, "sending request") - } - return nil, fmt.Errorf("error fetching repos: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return repos, nil } @@ -51,12 +45,8 @@ func (c *Client) CreateRepository(param params.CreateRepoParams) (params.Reposit SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Repository{}, err } return response, nil } @@ -67,12 +57,8 @@ func (c *Client) GetRepository(repoID string) (params.Repository, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error fetching repos: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Repository{}, err } return response, nil } @@ -81,12 +67,8 @@ func (c *Client) DeleteRepository(repoID string) error { url := fmt.Sprintf("%s/api/v1/repositories/%s", c.Config.BaseURL, repoID) resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error fetching repos: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -103,12 +85,8 @@ func (c *Client) CreateRepoPool(repoID string, param params.CreatePoolParams) (p SetBody(body). SetResult(&response). Post(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -120,12 +98,8 @@ func (c *Client) ListRepoPools(repoID string) ([]params.Pool, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil } @@ -137,12 +111,8 @@ func (c *Client) GetRepoPool(repoID, poolID string) (params.Pool, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -153,12 +123,8 @@ func (c *Client) DeleteRepoPool(repoID, poolID string) error { resp, err := c.client.R(). Delete(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return errors.Wrap(decErr, "sending request") - } - return fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return err } return nil } @@ -175,12 +141,8 @@ func (c *Client) UpdateRepoPool(repoID, poolID string, param params.UpdatePoolPa SetBody(body). SetResult(&response). Put(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return params.Pool{}, err } return response, nil } @@ -192,12 +154,8 @@ func (c *Client) ListRepoInstances(repoID string) ([]params.Instance, error) { resp, err := c.client.R(). SetResult(&response). Get(url) - if err != nil || resp.IsError() { - apiErr, decErr := c.decodeAPIError(resp.Body()) - if decErr != nil { - return response, errors.Wrap(decErr, "sending request") - } - return response, fmt.Errorf("error performing login: %s", apiErr.Details) + if err := c.handleError(err, resp); err != nil { + return nil, err } return response, nil }