diff options
author | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2012-12-17 14:51:19 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-02-21 15:06:18 +0000 |
commit | e2a99f9bb762e61053cd3ee788390d0b2bb5e72d (patch) | |
tree | 46193c449ad4bebad5af200e8d82882f2b7d0d6a /morphlib/plugins | |
parent | cd50ad396208af9bb5fe65945c0771673645ecca (diff) | |
download | morph-e2a99f9bb762e61053cd3ee788390d0b2bb5e72d.tar.gz |
Move MountableImage class into morphlib
This class would be pretty useful in other cases where a system image
needs to be mounted and inspected.
Also updates the Trebuchet plugin to use this class.
Diffstat (limited to 'morphlib/plugins')
-rw-r--r-- | morphlib/plugins/trebuchet_plugin.py | 60 |
1 files changed, 3 insertions, 57 deletions
diff --git a/morphlib/plugins/trebuchet_plugin.py b/morphlib/plugins/trebuchet_plugin.py index 2bdf4c3c..1ebffbf4 100644 --- a/morphlib/plugins/trebuchet_plugin.py +++ b/morphlib/plugins/trebuchet_plugin.py @@ -1,4 +1,4 @@ -# Copyright (C) 2012 Codethink Limited +# Copyright (C) 2012-2013 Codethink Limited # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -21,62 +21,8 @@ import gzip import morphlib -class MountableImage(object): - '''Mountable image (deals with decompression). - - Note, this is a read-only mount in the sense that the decompressed - image is not then recompressed after, instead any changes are discarded. - - ''' - def __init__(self, app, artifact_path): - self.app = app - self.artifact_path = artifact_path - - def setup(self, path): - self.app.status(msg='Preparing image %(path)s', path=path) - self.app.status(msg=' Decompressing...', chatty=True) - (tempfd, self.temp_path) = \ - tempfile.mkstemp(dir=self.app.settings['tempdir']) - - try: - with os.fdopen(tempfd, "wb") as outfh: - infh = gzip.open(path, "rb") - morphlib.util.copyfileobj(infh, outfh) - infh.close() - except: - os.unlink(self.temp_path) - raise - self.app.status(msg=' Mounting image at %(path)s', - path=self.temp_path, chatty=True) - part = morphlib.fsutils.setup_device_mapping(self.app.runcmd, - self.temp_path) - mount_point = tempfile.mkdtemp(dir=self.app.settings['tempdir']) - morphlib.fsutils.mount(self.app.runcmd, part, mount_point) - self.mount_point = mount_point - return mount_point - - def cleanup(self, path, mount_point): - self.app.status(msg='Clearing down image at %(path)s', path=path, - chatty=True) - try: - morphlib.fsutils.unmount(self.app.runcmd, mount_point) - except: - pass - try: - morphlib.fsutils.undo_device_mapping(self.app.runcmd, path) - except: - pass - try: - os.rmdir(mount_point) - os.unlink(path) - except: - pass - - def __enter__(self): - return self.setup(self.artifact_path) - - def __exit__(self, exctype, excvalue, exctraceback): - self.cleanup(self.temp_path, self.mount_point) +from morphlib.mountableimage import MountableImage + class TrebuchetPlugin(cliapp.Plugin): |