[blivet:master] Make a StorageDevice.raw_device property and use it where appropriate
Vratislav Podzimek
vpodzime at redhat.com
Wed Jun 4 10:56:13 UTC 2014
On Tue, 2014-06-03 at 09:09 -0400, mulhern wrote:
> Only allow a "NoneType has no attribute <x>" exception where it would
> be allowed by the code that it replaces anyway. Otherwise, check for
> existance of device before accessing its raw_device property.
>
> Signed-off-by: mulhern <amulhern at redhat.com>
> ---
> blivet/devicefactory.py | 27 ++++++---------------------
> blivet/devices.py | 9 +++++++++
> tests/devices_test.py | 1 +
> 3 files changed, 16 insertions(+), 21 deletions(-)
>
> diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
> index 055fdc2..c757a5d 100644
> --- a/blivet/devicefactory.py
> +++ b/blivet/devicefactory.py
> @@ -79,10 +79,7 @@ def get_device_type(device):
> "btrfs volume": DEVICE_TYPE_BTRFS,
> "mdarray": DEVICE_TYPE_MD}
>
> - use_dev = device
> - if isinstance(device, LUKSDevice):
> - use_dev = device.slave
> -
> + use_dev = device.raw_device
> if use_dev.isDisk:
> device_type = DEVICE_TYPE_DISK
> else:
> @@ -536,14 +533,7 @@ class DeviceFactory(object):
> @property
> def raw_device(self):
> """ If self.device is encrypted, this is its backing device. """
> - use_dev = None
> - if self.device:
> - if isinstance(self.device, LUKSDevice):
> - use_dev = self.device.slave
> - else:
> - use_dev = self.device
> -
> - return use_dev
> + return self.device.raw_device if self.device else None
>
> @property
> def devices(self):
> @@ -858,7 +848,7 @@ class PartitionFactory(DeviceFactory):
>
> def _set_device_size(self):
> """ Set the size of a defined factory device. """
> - if self.device and self.size != self.raw_device.size:
> + if self.raw_device and self.size != self.raw_device.size:
> log.info("adjusting device size from %s to %s",
> self.raw_device.size, self.size)
>
> @@ -1052,8 +1042,7 @@ class PartitionSetFactory(PartitionFactory):
> ##
> base_size = self._get_base_size()
> for member in members[:]:
> - if isinstance(member, LUKSDevice):
> - member = member.slave
> + member = member.raw_device
>
> # max size is set after instantiating the SizeSet below
> member.req_base_size = base_size
> @@ -1103,9 +1092,7 @@ class PartitionSetFactory(PartitionFactory):
> size_set = self.parent_factory.size_set_class(members, total_space)
> self.storage.size_sets.append(size_set)
> for member in members[:]:
> - if isinstance(member, LUKSDevice):
> - member = member.slave
> -
> + member = member.raw_device
> member.req_max_size = size_set.size
>
> ##
> @@ -1295,9 +1282,7 @@ class LVMFactory(DeviceFactory):
> # Likewise, if there's already a VG whose PV is an MD we need to
> # remove it completely before proceeding.
> for member in self.container.parents[:]:
> - use_dev = member
> - if isinstance(member, LUKSDevice):
> - use_dev = member.slave
> + use_dev = member.raw_device
>
> if ((self.container_raid_level and use_dev.type != "mdarray") or
> (not self.container_raid_level and use_dev.type == "mdarray")):
> diff --git a/blivet/devices.py b/blivet/devices.py
> index 80282c7..d324ce1 100644
> --- a/blivet/devices.py
> +++ b/blivet/devices.py
> @@ -672,6 +672,11 @@ class StorageDevice(Device):
>
> return self._partedDevice
>
> + @property
> + def raw_device(self):
> + """ The device itself, or when encrypted, the backing device. """
> + return self
> +
> def _setName(self, value):
> """Set the device's name.
>
> @@ -2173,6 +2178,10 @@ class LUKSDevice(DMCryptDevice):
> uuid=None, exists=exists)
>
> @property
> + def raw_device(self):
> + return self.slave
> +
> + @property
> def size(self):
> if not self.exists or not self.partedDevice:
> size = self.slave.size - crypto.LUKS_METADATA_SIZE
> diff --git a/tests/devices_test.py b/tests/devices_test.py
> index 3f8c4fc..3dc5fd1 100644
> --- a/tests/devices_test.py
> +++ b/tests/devices_test.py
> @@ -82,6 +82,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
> self.assertIsInstance(x, ParentList, m),
> "path" : lambda x, m: self.assertRegexpMatches(x, "^/dev", m),
> "partitionable" : self.assertFalse,
> + "raw_device" : self.assertIsNotNone,
> "resizable" : self.assertFalse,
> "size" : lambda x, m: self.assertEqual(x, Size(0), m),
> "spares" : lambda x, m: self.assertEqual(x, 0, m),
Still looks good to me.
--
Vratislav Podzimek
Anaconda Rider | RHCE | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list