X-Git-Url: https://code.grnet.gr/git/snf-image-creator/blobdiff_plain/f5174d2c356ba6197877b36d04c2dc175d66c7a3..3afe6b44b9915753117bc950becf86c71704dcbf:/image_creator/main.py diff --git a/image_creator/main.py b/image_creator/main.py index 4b86f7c..10fc0b5 100644 --- a/image_creator/main.py +++ b/image_creator/main.py @@ -181,8 +181,8 @@ def image_creator(): for extension in ('', '.meta', '.md5sum'): filename = "%s%s" % (options.outfile, extension) if os.path.exists(filename): - raise FatalError("Output file %s exists " - "(use --force to overwrite it)" % filename) + raise FatalError("Output file `%s' exists " + "(use --force to overwrite it)." % filename) # Check if the authentication token is valid. The earlier the better if options.token is not None: @@ -191,9 +191,24 @@ def image_creator(): if account is None: raise FatalError("The authentication token you provided is not" " valid!") + else: + kamaki = Kamaki(account, out) except ClientError as e: raise FatalError("Astakos client: %d %s" % (e.status, e.message)) + if options.upload and not options.force: + if kamaki.object_exists(options.upload): + raise FatalError("Remote pithos object `%s' exists " + "(use --force to overwrite it)." % options.upload) + if kamaki.object_exists("%s.md5sum" % options.upload): + raise FatalError("Remote pithos object `%s.md5sum' exists " + "(use --force to overwrite it)." % options.upload) + + if options.register and not options.force: + if kamaki.object_exists("%s.meta" % options.upload): + raise FatalError("Remote pithos object `%s.meta' exists " + "(use --force to overwrite it)." % options.upload) + disk = Disk(options.source, out, options.tmp) def signal_handler(signum, frame): @@ -206,7 +221,7 @@ def image_creator(): image = disk.get_image(snapshot) - # If no customization is to be applied, the image should be mounted ro + # If no customization is to be done, the image should be mounted ro ro = (not (options.sysprep or options.shrink) or options.print_sysprep) image.mount(ro) try: @@ -224,6 +239,13 @@ def image_creator(): return 0 if options.sysprep: + err_msg = "Unable to perform the system preparation tasks. " \ + "Couldn't mount the media%s. Use --no-sysprep if you " \ + "don't won't to perform any system preparation task." + if not image.mounted: + raise FatalError(err_msg % "") + elif image.mounted_ro: + raise FatalError(err_msg % " read-write") image.os.do_sysprep() metadata = image.os.meta @@ -265,19 +287,12 @@ def image_creator(): uploaded_obj = "" if options.upload: out.output("Uploading image to pithos:") - kamaki = Kamaki(account, out) with open(snapshot, 'rb') 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) + "(1/3) Calculating block hashes", + "(2/3) Uploading missing blocks") + out.output("(3/3) Uploading md5sum file ...", False) md5sumstr = '%s %s\n' % (checksum, os.path.basename(options.upload)) kamaki.upload(StringIO.StringIO(md5sumstr), @@ -293,6 +308,19 @@ def image_creator(): kamaki.register(options.register, uploaded_obj, metadata, options.public) out.success('done') + out.output("Uploading metadata file ...", False) + kamaki.upload(StringIO.StringIO(metastring), + size=len(metastring), + remote_path="%s.%s" % (options.upload, 'meta')) + out.success('done') + if options.public: + out.output("Sharing md5sum file ...", False) + kamaki.share("%s.md5sum" % options.upload) + out.success('done') + out.output("Sharing metadata file ...", False) + kamaki.share("%s.meta" % options.upload) + out.success('done') + out.output() except ClientError as e: raise FatalError("Pithos client: %d %s" % (e.status, e.message))