[blivet:f21-branch/master 2/3] Don't check for mdmember format when parent is container (#1150147)

David Lehman dlehman at redhat.com
Fri Oct 10 15:31:44 UTC 2014


On 10/10/2014 10:25 AM, mulhern wrote:
> Related: fed#1150147
>
> Set the required member device format to device format in this case,
> which should cover everything.
>
> 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..2afce57 100644
> --- a/blivet/devices.py
> +++ b/blivet/devices.py
> @@ -2327,9 +2327,29 @@ class ContainerDevice(StorageDevice):
>           doc="The container UUID attribute in the member format class")
>
>       def __init__(self, *args, **kwargs):
> -        self.formatClass = get_device_format_class(self._formatClassName)
> +        formatClassName = self._formatClassName
> +
> +        parents = kwargs["parents"]
> +        # Override MDRaidArrayDevice's format class restriction if the
> +        # member is an mdcontainer.
> +        # Note that self.formatClass must be set before superclass
> +        # constructor is called since superclass constructor requires that
> +        # self._addParent() method have a defined self.formatClass.
> +        if parents and isinstance(self, MDRaidArrayDevice):
> +            if isinstance(parents, list):
> +                parent = parents[0]
> +            else:
> +                parent = parents
> +
> +            try:
> +                if parent.type == "mdcontainer":
> +                    formatClassName = None
> +            except AttributeError:
> +                pass
> +
> +        self.formatClass = get_device_format_class(formatClassName)
>           if not self.formatClass:
> -            raise errors.StorageError("cannot find '%s' class" % self._formatClassName)
> +            raise errors.StorageError("cannot find '%s' class" % formatClassName)
>
>           super(ContainerDevice, self).__init__(*args, **kwargs)
>

I'm curious why you opted to put this in ContainerDevice instead of 
doing it in MDRaidArrayDevice. It would be less code and it would keep 
the ContainerDevice class free of type-specific code.

David



More information about the anaconda-patches mailing list