[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