Cleanup adfter keyboard interrupts (also do a better job of cleaning up)

This commit is contained in:
Anders Ingemann 2015-01-16 01:51:58 +01:00
parent 87f2d889b7
commit 0fe3c9e984
2 changed files with 22 additions and 11 deletions

View file

@ -85,10 +85,10 @@ class VirtualBoxInstance(Instance):
self.create() self.create()
try: try:
self.boot() self.boot()
except Exception as e: except (Exception, KeyboardInterrupt) as e:
self.shutdown() self.shutdown()
raise e raise e
except Exception as e: except (Exception, KeyboardInterrupt) as e:
self.destroy() self.destroy()
raise e raise e

View file

@ -35,19 +35,30 @@ class BootableManifest(object):
handle, image_path = tempfile.mkstemp() handle, image_path = tempfile.mkstemp()
import os import os
os.close(handle) os.close(handle)
build_server.download(bootstrap_info.volume.image_path, image_path) try:
build_server.delete(bootstrap_info.volume.image_path) build_server.download(bootstrap_info.volume.image_path, image_path)
except (Exception, KeyboardInterrupt) as e:
os.remove(image_path)
raise e
finally:
build_server.delete(bootstrap_info.volume.image_path)
image_type = {'virtualbox': VirtualBoxImage} image_type = {'virtualbox': VirtualBoxImage}
return image_type.get(self.manifest_data['provider']['name'])(manifest, image_path) return image_type.get(self.manifest_data['provider']['name'])(manifest, image_path)
def __enter__(self): def __enter__(self):
self.build_server = self.pick_build_server() try:
self.manifest = self.get_manifest(self.build_server) self.build_server = self.pick_build_server()
self.bootstrap_info = self.bootstrap(self.manifest, self.build_server) self.manifest = self.get_manifest(self.build_server)
self.image = self.get_image(self.build_server, self.bootstrap_info, self.manifest) self.bootstrap_info = self.bootstrap(self.manifest, self.build_server)
self.image.open() self.image = self.get_image(self.build_server, self.bootstrap_info, self.manifest)
self.instance = self.image.get_instance() self.image.open()
self.instance.up() self.instance = self.image.get_instance()
self.instance.up()
except (Exception, KeyboardInterrupt) as e:
if hasattr(self, 'image'):
self.image.close()
self.image.destroy()
raise e
return self.instance return self.instance
def __exit__(self, type, value, traceback): def __exit__(self, type, value, traceback):