From e5897bdd44bc4aa90b539d6664d98cd588fc7470 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Wed, 14 Aug 2019 12:41:07 -0400 Subject: [PATCH] Log errors better in case of unknown REST errors If we get an unexpected exception, it's helpful to know the cloud and region involved. It's also nice to return that information for maybe better readability. Change-Id: I1c589744103512d981e64e1a3f9506d40e1bf4cf --- .../library/zuul_swift_upload.py | 46 ++++++++++++------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/roles/upload-logs-swift/library/zuul_swift_upload.py b/roles/upload-logs-swift/library/zuul_swift_upload.py index de5339340..4a3420a7e 100755 --- a/roles/upload-logs-swift/library/zuul_swift_upload.py +++ b/roles/upload-logs-swift/library/zuul_swift_upload.py @@ -133,6 +133,14 @@ def get_mime_icon(mime, filename=''): return "data:image/png;base64,%s" % ICON_IMAGES[icon] +def get_cloud(cloud): + if isinstance(cloud, dict): + config = openstack.config.loader.OpenStackConfig().get_one(**cloud) + return openstack.connection.Connection(config=config) + else: + return openstack.connect(cloud=cloud) + + def sizeof_fmt(num, suffix='B'): # From http://stackoverflow.com/questions/1094841/ # reusable-library-to-get-human-readable-version-of-file-size @@ -462,11 +470,7 @@ class DeflateFilter(): class Uploader(): def __init__(self, cloud, container, prefix=None, delete_after=None, public=True): - if isinstance(cloud, dict): - config = openstack.config.loader.OpenStackConfig().get_one(**cloud) - self.cloud = openstack.connection.Connection(config=config) - else: - self.cloud = openstack.connect(cloud=cloud) + self.cloud = cloud self.container = container self.prefix = prefix or '' self.delete_after = delete_after @@ -669,16 +673,26 @@ def ansible_main(): ) p = module.params - url = run(p.get('cloud'), p.get('container'), p.get('files'), - indexes=p.get('indexes'), - parent_links=p.get('parent_links'), - topdir_parent_link=p.get('topdir_parent_link'), - partition=p.get('partition'), - footer=p.get('footer'), - delete_after=p.get('delete_after', 15552000), - prefix=p.get('prefix'), - public=p.get('public')) - + cloud = get_cloud(p.get('cloud')) + try: + url = run(cloud, p.get('container'), p.get('files'), + indexes=p.get('indexes'), + parent_links=p.get('parent_links'), + topdir_parent_link=p.get('topdir_parent_link'), + partition=p.get('partition'), + footer=p.get('footer'), + delete_after=p.get('delete_after', 15552000), + prefix=p.get('prefix'), + public=p.get('public')) + except (keystoneauth1.exceptions.HTTPError, + requests.exceptions.RequestException) as e: + module.fail_json( + changed=False, + msg=str(e), + cloud=cloud.name, + region_name=cloud.config.region_name) + logging.exception("Error uploading to %s.%s", + cloud.name, cloud.config.region_name) module.exit_json(changed=True, url=url) @@ -738,7 +752,7 @@ def cli_main(): if append_footer.lower() == 'none': append_footer = None - url = run(args.cloud, args.container, args.files, + url = run(get_cloud(args.cloud), args.container, args.files, indexes=not args.no_indexes, parent_links=not args.no_parent_links, topdir_parent_link=args.create_topdir_parent_link,