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(a)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