On Wed, 2014-11-05 at 09:49 -0600, David Lehman wrote:
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.
---
blivet/devicetree.py | 10 ++++++++--
blivet/errors.py | 4 ++++
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/blivet/devicetree.py b/blivet/devicetree.py
index 7af4c8e..a9c70b4 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 ConfigurationError, 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
@@ -948,7 +948,7 @@ 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)
+ raise ConfigurationError("failed to scan disk %s" %
disk.name)
# there's no need to filter partitions on members of multipaths or
# fwraid members from lvm since multipath and dmraid are already
@@ -1534,6 +1534,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 ConfigurationError("multiple LVM volume groups with the same
name")
+
try:
vg_size = udev.device_get_vg_size(info)
vg_free = udev.device_get_vg_free(info)
diff --git a/blivet/errors.py b/blivet/errors.py
index a359b67..f39e4d9 100644
--- a/blivet/errors.py
+++ b/blivet/errors.py
@@ -153,6 +153,10 @@ class DeviceTreeError(StorageError):
class DeviceNotFoundError(StorageError):
pass
+class ConfigurationError(StorageError):
+ """ User has an unusable initial storage configuration.
"""
+ pass
+
"ConfigurationError" sounds to me more like if it was an error during
configuration of something by us. What about "UnsupportedConfiguration"
or "UnsupportedSetup"?
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic