[blivet:master/f21-branch 1/2] Abstract ContainerDevice member format check into a method (#1150147)

mulhern amulhern at redhat.com
Thu Oct 9 15:29:03 UTC 2014


Resolves: fed#1150147

Override the member format check in MDRaidArrayDevice.

MDRaidArrayDevices are ContainerDevices that generally enforce
that the format of member devices is 'mdmember'. This is usually correct,
but devices which are MDRaidArrayDevices which themselves have type
mdcontainer may be members of MDRaidArrayDevices and they do not have
format of 'mdmember'. In this case, therefore, no restriction on
format type is enforced by MDRaidArrayDevice.

Signed-off-by: mulhern <amulhern at redhat.com>
---
 blivet/devices.py | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/blivet/devices.py b/blivet/devices.py
index 6ee5bfe..abdf8d1 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -2333,6 +2333,18 @@ class ContainerDevice(StorageDevice):
 
         super(ContainerDevice, self).__init__(*args, **kwargs)
 
+    def _verifyMemberFormat(self, member):
+        """ Whether the member has the format expected by the device.
+
+            :param member: the member device to add
+            :type member: :class:`.StorageDevice`
+            :returns: error msg if the member has incorrect format, else None
+            :rtype: str or NoneType
+        """
+        if not isinstance(member.format, self.formatClass):
+            return "Member format %(format)s is not a subtype of expected format %(expected)s." % {'format' : member.format, 'expected' : self.formatClass}
+        return None
+
     def _addParent(self, member):
         """ Add a member device to the container.
 
@@ -2343,8 +2355,10 @@ class ContainerDevice(StorageDevice):
             contents at all.
         """
         log_method_call(self, self.name, member=member.name)
-        if not isinstance(member.format, self.formatClass):
-            raise ValueError("member has wrong format")
+
+        error = self._verifyMemberFormat(member)
+        if error:
+            raise ValueError(error)
 
         if member.format.exists and self.uuid and self._formatUUIDAttr and \
            getattr(member.format, self._formatUUIDAttr) != self.uuid:
@@ -3690,6 +3704,12 @@ class MDRaidArrayDevice(ContainerDevice):
             open("/etc/mdadm.conf", "a").write("ARRAY %s UUID=%s\n"
                                                 % (self.path, self.uuid))
 
+    def _verifyMemberFormat(self, member):
+        if member.type == "mdcontainer":
+            return None
+
+        return super(MDRaidArrayDevice, self)._verifyMemberFormat(member)
+
     @property
     def level(self):
         """ Return the raid level
-- 
1.9.3



More information about the anaconda-patches mailing list