diff --git a/osbs/cli/main.py b/osbs/cli/main.py index 0f923546d..1c3511922 100644 --- a/osbs/cli/main.py +++ b/osbs/cli/main.py @@ -18,7 +18,7 @@ from osbs.api import OSBS from osbs.conf import Configuration from osbs.constants import DEFAULT_CONFIGURATION_FILE, DEFAULT_CONFIGURATION_SECTION -from osbs.exceptions import OsbsNetworkException, OsbsException, OsbsAuthException +from osbs.exceptions import OsbsNetworkException, OsbsException, OsbsAuthException, OsbsResponseException logger = logging.getLogger('osbs') @@ -392,6 +392,16 @@ def main(): logger.error("Authentication failure: %s", ex.message) return -1 + except OsbsResponseException as ex: + if is_verbose: + raise + else: + if isinstance(ex.json, dict) and 'message' in ex.json: + msg = ex.json['message'] + else: + msg = ex.message + logger.error("Server returned error %s: %s", ex.status_code, msg) + return -1 except Exception as ex: # pylint: disable=broad-except if is_verbose: raise diff --git a/osbs/exceptions.py b/osbs/exceptions.py index 60eb63665..c90393720 100644 --- a/osbs/exceptions.py +++ b/osbs/exceptions.py @@ -10,6 +10,7 @@ """ from __future__ import print_function, absolute_import, unicode_literals +import json from traceback import format_tb @@ -45,6 +46,14 @@ class OsbsResponseException(OsbsException): def __init__(self, message, status_code, *args, **kwargs): super(OsbsResponseException, self).__init__(message, *args, **kwargs) self.status_code = status_code + self.json = None + + # try decoding openshift Status object + # https://docs.openshift.org/latest/rest_api/openshift_v1.html#v1-status + try: + self.json = json.loads(message) + except ValueError: + pass class OsbsNetworkException(OsbsException):