diff options
author | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2014-11-11 15:42:07 +0000 |
---|---|---|
committer | Pedro Alvarez <pedro.alvarez@codethink.co.uk> | 2014-12-01 16:39:42 +0000 |
commit | ccf9a34737749e9cbbd0ae0453ed08b3be4b4df5 (patch) | |
tree | e5eeebdcbfea27147d8417f0dd07ff2fd1ff9b38 /morphlib/writeexts.py | |
parent | 67686a2530fdfdf180434268fd326fa2bb67e0b2 (diff) | |
download | morph-ccf9a34737749e9cbbd0ae0453ed08b3be4b4df5.tar.gz |
Split create_local_system on various methods
This way we can still use create_local_system to create
a raw disk, but also reuse bits of it to be able e.g. to
deploy to devices.
Diffstat (limited to 'morphlib/writeexts.py')
-rw-r--r-- | morphlib/writeexts.py | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/morphlib/writeexts.py b/morphlib/writeexts.py index 31e7a0b6..7030c0b5 100644 --- a/morphlib/writeexts.py +++ b/morphlib/writeexts.py @@ -24,6 +24,7 @@ import time import tempfile import errno import stat +import contextlib import morphlib @@ -147,25 +148,39 @@ class WriteExtension(cliapp.Application): def create_local_system(self, temp_root, raw_disk): '''Create a raw system image locally.''' + + with self.created_disk_image(raw_disk): + self.format_btrfs(raw_disk) + self.create_system(temp_root, raw_disk) + + @contextlib.contextmanager + def created_disk_image(self, location): size = self.get_disk_size() if not size: raise cliapp.AppException('DISK_SIZE is not defined') - self.create_raw_disk_image(raw_disk, size) + self.create_raw_disk_image(location, size) + try: + yield + except BaseException: + os.unlink(location) + raise + + def format_btrfs(self, raw_disk): try: self.mkfs_btrfs(raw_disk) - mp = self.mount(raw_disk) except BaseException: sys.stderr.write('Error creating disk image') - os.remove(raw_disk) raise + + def create_system(self, temp_root, raw_disk): try: + mp = self.mount(raw_disk) self.create_btrfs_system_layout( temp_root, mp, version_label='factory', disk_uuid=self.get_uuid(raw_disk)) except BaseException, e: sys.stderr.write('Error creating Btrfs system layout') self.unmount(mp) - os.remove(raw_disk) raise else: self.unmount(mp) |