From 2e90cfb8c3ba65c87c1a544a4e0c7cd92d5dd17a Mon Sep 17 00:00:00 2001 From: Nikos Skalkotos <skalkoto@grnet.gr> Date: Mon, 26 May 2014 10:47:17 +0300 Subject: [PATCH] Add an attribute in OSBase to host mount errors Add the _mount_error attribute in OSBase. If mount fails, the error message is written there. --- image_creator/os_type/__init__.py | 10 ++++++++-- image_creator/os_type/freebsd.py | 2 +- image_creator/os_type/unix.py | 2 +- image_creator/os_type/unsupported.py | 2 +- image_creator/os_type/windows/__init__.py | 6 +++++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/image_creator/os_type/__init__.py b/image_creator/os_type/__init__.py index 524ca32..ba1f6e3 100644 --- a/image_creator/os_type/__init__.py +++ b/image_creator/os_type/__init__.py @@ -199,6 +199,9 @@ class OSBase(object): self.meta = {} self.mounted = False + # This will host the error if mount fails + self._mount_error = "" + # Many guestfs compilations don't support scrub self._scrub_support = True try: @@ -340,7 +343,9 @@ class OSBase(object): try: if not self.mount(readonly=False): - raise FatalError("Unable to mount the media read-write") + msg = "Unable to mount the media read-write. Reason: %s" % \ + self._mount_error + raise FatalError(msg) enabled = [task for task in self.list_syspreps() if task.enabled] @@ -365,6 +370,7 @@ class OSBase(object): mount_type = 'read-only' if readonly else 'read-write' self.out.output("Mounting the media %s ..." % mount_type, False) + self._mount_error = "" if not self._do_mount(readonly): return False @@ -466,7 +472,7 @@ class OSBase(object): self.image.g.mount_options( 'ro' if readonly else 'rw', self.root, '/') except RuntimeError as msg: - self.out.warn("unable to mount the root partition: %s" % msg) + self._mount_error = str(msg) return False return True diff --git a/image_creator/os_type/freebsd.py b/image_creator/os_type/freebsd.py index ce875dd..dce0458 100644 --- a/image_creator/os_type/freebsd.py +++ b/image_creator/os_type/freebsd.py @@ -118,7 +118,7 @@ class Freebsd(Unix): self.image.g.mount_vfs(mopts, 'ufs', dev, mp) except RuntimeError as msg: if mp in critical_mpoints: - self.out.warn('unable to mount %s. Reason: %s' % (mp, msg)) + self._mount_error = str(msg) return False else: self.out.warn('%s (ignored)' % msg) diff --git a/image_creator/os_type/unix.py b/image_creator/os_type/unix.py index ce90964..00ede28 100644 --- a/image_creator/os_type/unix.py +++ b/image_creator/os_type/unix.py @@ -63,7 +63,7 @@ class Unix(OSBase): self.image.g.mount_options(mopts, dev, mp) except RuntimeError as msg: if mp in critical_mpoints: - self.out.warn('unable to mount %s. Reason: %s' % (mp, msg)) + self._mount_error = str(msg) return False else: self.out.warn('%s (ignored)' % msg) diff --git a/image_creator/os_type/unsupported.py b/image_creator/os_type/unsupported.py index 918f094..93b711f 100644 --- a/image_creator/os_type/unsupported.py +++ b/image_creator/os_type/unsupported.py @@ -31,7 +31,7 @@ class Unsupported(OSBase): def _do_mount(self, readonly): """Mount partitions in correct order""" - self.out.warn('not supported on this media.') + self._mount_error = "not supported on this media" return False # vim: set sta sts=4 shiftwidth=4 sw=4 et ai : diff --git a/image_creator/os_type/windows/__init__.py b/image_creator/os_type/windows/__init__.py index 69c898a..66acd5c 100644 --- a/image_creator/os_type/windows/__init__.py +++ b/image_creator/os_type/windows/__init__.py @@ -315,8 +315,12 @@ class Windows(OSBase): timeout = self.sysprep_params['boot_timeout'].value shutdown_timeout = self.sysprep_params['shutdown_timeout'].value - self.mount(readonly=False) try: + if not self.mount(readonly=False): + msg = "Unable to mount the media read-write. Reason: %s" % \ + self._mount_error + raise FatalError(msg) + virtio_state = self._virtio_state() if len(virtio_state['viostor']) == 0: raise FatalError( -- GitLab