[PATCH 4/4] Raise UnusableConfigurationError when unusable configuration is detected.
Anne Mulhern
amulhern at redhat.com
Tue Jan 20 19:16:49 UTC 2015
----- Original Message -----
> From: "David Lehman" <dlehman at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Friday, January 9, 2015 4:32:33 PM
> Subject: [PATCH 4/4] Raise UnusableConfigurationError when unusable configuration is detected.
>
> The two cases included initially are a corrupt gpt disklabel and
> multiple lvm volume groups with the same name.
>
> Blivet cannot proceed in the corrupt gpt case because pyparted doesn't
> support instantiating a parted.Disk if the underlying gpt disklabel is
> corrupt.
>
> The lvm case has several issues, the most basic being that lvm is not
> designed to handle multiple volume groups with the same name. A user
> would have to rename one of the same-named vgs manually in order to
> make it possible to use both vgs.
>
> Resolves: rhbz#1123450
> ---
> blivet/devicetree.py | 15 +++++++++++++--
> blivet/errors.py | 4 ++++
> 2 files changed, 17 insertions(+), 2 deletions(-)
>
> diff --git a/blivet/devicetree.py b/blivet/devicetree.py
> index 2e5850a..37a0f97 100644
> --- a/blivet/devicetree.py
> +++ b/blivet/devicetree.py
> @@ -27,7 +27,7 @@ import shutil
> import pprint
> import copy
>
> -from .errors import CryptoError, DeviceError, DeviceTreeError,
> DiskLabelCommitError, DMError, FSError, InvalidDiskLabelError, LUKSError,
> MDRaidError, StorageError
> +from .errors import UnusableConfigurationError, CryptoError, DeviceError,
> DeviceTreeError, DiskLabelCommitError, DMError, FSError,
> InvalidDiskLabelError, LUKSError, MDRaidError, StorageError
> from .devices import BTRFSDevice, BTRFSSubVolumeDevice, BTRFSVolumeDevice,
> BTRFSSnapShotDevice
> from .devices import DASDDevice, DMDevice, DMLinearDevice,
> DMRaidArrayDevice, DiskDevice
> from .devices import FcoeDiskDevice, FileDevice, LoopDevice, LUKSDevice
> @@ -946,7 +946,12 @@ class DeviceTree(object):
> if (disk.partitionable and not
> (disk.format.type == "iso9660" or disk.format.hidden) and
> (flags.installer_mode and not self._isIgnoredDisk(disk))):
> - raise DeviceTreeError("failed to scan disk %s" % disk.name)
> + if info.get("ID_PART_TABLE_TYPE") == "gpt":
> + msg = "corrupt gpt disklabel on disk %s" % disk.name
> + else:
> + msg = "failed to scan disk %s" % disk.name
> +
> + raise UnusableConfigurationError(msg)
>
> # there's no need to filter partitions on members of multipaths
> or
> # fwraid members from lvm since multipath and dmraid are already
> @@ -1554,6 +1559,12 @@ class DeviceTree(object):
> if vg_device:
> vg_device.parents.append(device)
> else:
> + same_name = self.getDeviceByName(vg_name)
> + if isinstance(same_name, LVMVolumeGroupDevice) and \
> + not (all(self._isIgnoredDisk(d) for d in same_name.disks) or
> + all(self._isIgnoredDisk(d) for d in device.disks)):
> + raise UnusableConfigurationError("multiple LVM volume groups
> with the same name")
> +
> try:
> vg_size = udev.device_get_vg_size(pv_info)
> vg_free = udev.device_get_vg_free(pv_info)
> diff --git a/blivet/errors.py b/blivet/errors.py
> index 71fb7c8..1dae5e3 100644
> --- a/blivet/errors.py
> +++ b/blivet/errors.py
> @@ -151,6 +151,10 @@ class DeviceTreeError(StorageError):
> class DeviceNotFoundError(StorageError):
> pass
>
> +class UnusableConfigurationError(StorageError):
> + """ User has an unusable initial storage configuration. """
> + pass
> +
> # DeviceAction
> class DeviceActionError(StorageError):
> pass
> --
> 1.9.3
>
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
>
This looks ok to me.
- mulhern
More information about the anaconda-patches
mailing list