From: Nikos Skalkotos Date: Fri, 15 Jun 2012 08:32:20 +0000 (+0300) Subject: Don't handle kamaki exceptions in kamaki_wrapper X-Git-Tag: v0.1~74 X-Git-Url: https://code.grnet.gr/git/snf-image-creator/commitdiff_plain/3b7d3fc77471e64af3d892097dec1fde83c575fa Don't handle kamaki exceptions in kamaki_wrapper Let the application decide what to do with them. If image-creator receives an error from kamaki it will terminate. But this may not be the proper thing to do for an interactive application like image-creator-dialog --- diff --git a/image_creator/kamaki_wrapper.py b/image_creator/kamaki_wrapper.py index 2ad66f4..66bb940 100644 --- a/image_creator/kamaki_wrapper.py +++ b/image_creator/kamaki_wrapper.py @@ -63,33 +63,27 @@ class Kamaki(object): def upload(self, file_obj, size=None, remote_path=None, hp=None, up=None): """Upload a file to pithos""" - if remote_path is None: - remote_path = basename(filename) + + path = basename(file_obj.name) if remote_path is None else remote_path try: self.pithos_client.create_container(self.container) except ClientError as e: if e.status != 202: # Ignore container already exists errors - raise FatalError("Pithos client: %d %s" % \ - (e.status, e.message)) - try: - hash_cb = self.out.progress_generator(hp) \ - if hp is not None else None - upload_cb = self.out.progress_generator(up) \ - if up is not None else None - self.pithos_client.create_object(remote_path, file_obj, size, - hash_cb, upload_cb) - return "pithos://%s/%s/%s" % \ - (self.account, self.container, remote_path) - except ClientError as e: - raise FatalError("Pithos client: %d %s" % (e.status, e.message)) + raise e + + hash_cb = self.out.progress_generator(hp) if hp is not None else None + upload_cb = self.out.progress_generator(up) if up is not None else None + + self.pithos_client.create_object(path, file_obj, size, hash_cb, + upload_cb) + + return "pithos://%s/%s/%s" % (self.account, self.container, path) def register(self, name, location, metadata): """Register an image to ~okeanos""" + params = {'is_public': 'true', 'disk_format': 'diskdump'} - try: - self.image_client.register(name, location, params, metadata) - except ClientError as e: - raise FatalError("Image client: %d %s" % (e.status, e.message)) + self.image_client.register(name, location, params, metadata) # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : diff --git a/image_creator/main.py b/image_creator/main.py index 8857eb8..fa2e23d 100644 --- a/image_creator/main.py +++ b/image_creator/main.py @@ -40,7 +40,7 @@ from image_creator.util import get_command, FatalError, MD5 from image_creator.output.cli import SilentOutput, SimpleOutput, \ OutputWthProgress from image_creator.os_type import os_cls -from image_creator.kamaki_wrapper import Kamaki +from image_creator.kamaki_wrapper import Kamaki, ClientError import sys import os import optparse @@ -241,33 +241,37 @@ def image_creator(): disk.destroy_device(dev) out.output() - - uploaded_obj = "" - if options.upload: - out.output("Uploading image to pithos:") - kamaki = Kamaki(options.account, options.token, out) - with open(snapshot) as f: - uploaded_obj = kamaki.upload(f, size, options.upload, - "(1/4) Calculating block hashes", - "(2/4) Uploading missing blocks") - - out.output("(3/4) Uploading metadata file...", False) - kamaki.upload(StringIO.StringIO(metastring), size=len(metastring), - remote_path="%s.%s" % (options.upload, 'meta')) - out.success('done') - out.output("(4/4) Uploading md5sum file...", False) - md5sumstr = '%s %s\n' % ( - checksum, os.path.basename(options.upload)) - kamaki.upload(StringIO.StringIO(md5sumstr), size=len(md5sumstr), - remote_path="%s.%s" % (options.upload, 'md5sum')) - out.success('done') - out.output() - - if options.register: - out.output('Registring image to ~okeanos...', False) - kamaki.register(options.register, uploaded_obj, metadata) - out.success('done') - out.output() + try: + uploaded_obj = "" + if options.upload: + out.output("Uploading image to pithos:") + kamaki = Kamaki(options.account, options.token, out) + with open(snapshot) as f: + uploaded_obj = kamaki.upload(f, size, options.upload, + "(1/4) Calculating block hashes", + "(2/4) Uploading missing blocks") + + out.output("(3/4) Uploading metadata file...", False) + kamaki.upload(StringIO.StringIO(metastring), + size=len(metastring), + remote_path="%s.%s" % (options.upload, 'meta')) + out.success('done') + out.output("(4/4) Uploading md5sum file...", False) + md5sumstr = '%s %s\n' % ( + checksum, os.path.basename(options.upload)) + kamaki.upload(StringIO.StringIO(md5sumstr), + size=len(md5sumstr), + remote_path="%s.%s" % (options.upload, 'md5sum')) + out.success('done') + out.output() + + if options.register: + out.output('Registring image to ~okeanos...', False) + kamaki.register(options.register, uploaded_obj, metadata) + out.success('done') + out.output() + except ClientError as e: + raise FatalError("Pithos client: %d %s" % (e.status, e.message)) finally: out.output('cleaning up...') @@ -287,7 +291,6 @@ def main(): SimpleOutput(colored).error(e) sys.exit(1) - if __name__ == '__main__': main()