filesystem: fix path property from Raid - override attribute

The following commmit:
  ce146ab28 add .path to Raid so for_client(raid-with-partitions) works

introduced a (read only) path property for Raid objects, returning an
imaginary value to make for_client work with Raid objects. Later on, the
following commit:
  8e658998e add "path" attributes to fs model objects that curtin now
            provides a path for

introduced a (read/write) path attribute to all filesystem objects. For
Raid however, the property still takes precedence over the new attribute
of the same name, so doing raid.path = x is invalid (no setter) and
results in the following exception:

AttributeError: can't set attribute 'path'

Fixed by using a @property + @setter attribute for path. The getter
returns the actual path if it exists, otherwise returns the same
imaginary value as before.

Signed-off-by: Olivier Gayot <olivier.gayot@canonical.com>
This commit is contained in:
Olivier Gayot 2023-03-24 14:17:00 +01:00
parent 4496f22ff8
commit 6737e2c053
1 changed files with 7 additions and 1 deletions

View File

@ -820,16 +820,22 @@ class Raid(_Device):
wipe = attr.ib(default=None)
ptable = attributes.ptable()
metadata = attr.ib(default=None)
path = attr.ib(default=None)
_path = attr.ib(default=None)
container = attributes.ref(backlink="_subvolumes", default=None) # Raid
_subvolumes = attributes.backlink(default=attr.Factory(list))
@property
def path(self):
if self._path is not None:
return self._path
# This is just here to make for_client(raid-with-partitions) work. It
# might not be very accurate.
return '/dev/md/' + self.name
@path.setter
def path(self, value):
self._path = value
@property
def size(self):
if self.preserve and self._m._probe_data: