Commit 3b7d3fc7 authored by Nikos Skalkotos's avatar Nikos Skalkotos
Browse files

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
parent 672cabb9
......@@ -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 :
......@@ -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()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment