Change the name to raidLevel, make it a property, and change the
return type to a RAIDLevel object.
Signed-off-by: mulhern <amulhern(a)redhat.com>
---
blivet/devicefactory.py | 19 -------------------
blivet/devices.py | 31 +++++++++++++++++++++++++++++++
tests/devices_test.py | 37 ++++++++++++++++++++++++++++++-------
3 files changed, 61 insertions(+), 26 deletions(-)
diff --git a/blivet/devicefactory.py b/blivet/devicefactory.py
index d425b40..5dcebd3 100644
--- a/blivet/devicefactory.py
+++ b/blivet/devicefactory.py
@@ -89,25 +89,6 @@ def get_supported_raid_levels(device_type):
return set(pkg.RAID_levels) if pkg else set()
-def get_raid_level(device):
- # TODO: move this into StorageDevice
- use_dev = device
- if isinstance(device, LUKSDevice):
- use_dev = device.slave
-
- # TODO: lvm and perhaps pulling raid level from md pvs
- raid_level = None
- if hasattr(use_dev, "level"):
- raid_level = use_dev.level.name
- elif hasattr(use_dev, "dataLevel"):
- raid_level = use_dev.dataLevel or "single"
- elif hasattr(use_dev, "volume"):
- raid_level = use_dev.volume.dataLevel or "single"
- elif hasattr(use_dev, "lvs") and len(use_dev.parents) == 1:
- raid_level = get_raid_level(use_dev.parents[0])
-
- return raid_level
-
def get_device_factory(blivet, device_type, size, **kwargs):
""" Return a suitable DeviceFactory instance for device_type.
"""
disks = kwargs.pop("disks", [])
diff --git a/blivet/devices.py b/blivet/devices.py
index 346261f..80b4d47 100644
--- a/blivet/devices.py
+++ b/blivet/devices.py
@@ -1102,6 +1102,17 @@ class StorageDevice(Device):
return -1
return 0
+ @property
+ def raidLevel(self):
+ """ A RAID level for this device, or sometimes for its component
+ devices. Where this is a distinction, returns the RAID level
+ for the data, not the metadata.
+
+ :returns: the raid level for this device
+ :rtype: :class:`~.devicelibs.raid.RAIDLevel`
+ """
+ return None
+
def populateKSData(self, data):
# the common pieces are basically the formatting
self.format.populateKSData(data)
@@ -2195,6 +2206,10 @@ class LUKSDevice(DMCryptDevice):
def dracutSetupArgs(self):
return set(["rd.luks.uuid=luks-%s" % self.slave.format.uuid])
+ @property
+ def raidLevel(self):
+ return self.slave.raidLevel
+
def populateKSData(self, data):
self.slave.populateKSData(data)
data.encrypted = True
@@ -3037,6 +3052,10 @@ class LVMLogicalVolumeDevice(DMDevice):
return -1
return 0
+ @property
+ def raidLevel(self):
+ return None if not self.parents else self.parents[0].raidLevel
+
def populateKSData(self, data):
super(LVMLogicalVolumeDevice, self).populateKSData(data)
data.vgname = self.vg.name
@@ -3778,6 +3797,10 @@ class MDRaidArrayDevice(ContainerDevice):
def dracutSetupArgs(self):
return set(["rd.md.uuid=%s" % self.uuid])
+ @property
+ def raidLevel(self):
+ return self.level
+
def populateKSData(self, data):
if self.isDisk:
return
@@ -4951,6 +4974,10 @@ class BTRFSVolumeDevice(BTRFSDevice, ContainerDevice):
finally:
self._undo_temp_mount()
+ @property
+ def raidLevel(self):
+ return self.dataLevel
+
def populateKSData(self, data):
super(BTRFSVolumeDevice, self).populateKSData(data)
data.dataLevel = self.dataLevel.name if self.dataLevel else None
@@ -5029,6 +5056,10 @@ class BTRFSSubVolumeDevice(BTRFSDevice):
btrfs.delete_subvolume(mountpoint, self.name)
self.volume._undo_temp_mount()
+ @property
+ def raidLevel(self):
+ return self.volume.raidLevel
+
def populateKSData(self, data):
super(BTRFSSubVolumeDevice, self).populateKSData(data)
data.subvol = True
diff --git a/tests/devices_test.py b/tests/devices_test.py
index 3f8c4fc..8613e22 100644
--- a/tests/devices_test.py
+++ b/tests/devices_test.py
@@ -17,6 +17,7 @@ from blivet.devices import OpticalDevice
from blivet.devices import StorageDevice
from blivet.devices import ParentList
from blivet.devicelibs import btrfs
+from blivet.devicelibs import raid
from blivet.size import Size
from blivet.formats import getFormat
@@ -82,6 +83,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
self.assertIsInstance(x, ParentList, m),
"path" : lambda x, m: self.assertRegexpMatches(x, "^/dev",
m),
"partitionable" : self.assertFalse,
+ "raidLevel" : self.assertIsNone,
"resizable" : self.assertFalse,
"size" : lambda x, m: self.assertEqual(x, Size(0), m),
"spares" : lambda x, m: self.assertEqual(x, 0, m),
@@ -238,20 +240,27 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
##
self.stateCheck(self.dev1,
level=lambda x, m: self.assertEqual(x.name,
"container", m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.Container, m),
type=lambda x, m: self.assertEqual(x, "mdcontainer",
m))
self.stateCheck(self.dev2,
createBitmap=self.assertFalse,
- level=lambda x, m: self.assertEqual(x.number, 0, m))
+ level=lambda x, m: self.assertEqual(x.number, 0, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID0, m))
self.stateCheck(self.dev3,
- level=lambda x, m: self.assertEqual(x.number, 1, m))
+ level=lambda x, m: self.assertEqual(x.number, 1, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID1, m))
self.stateCheck(self.dev4,
- level=lambda x, m: self.assertEqual(x.number, 4, m))
+ level=lambda x, m: self.assertEqual(x.number, 4, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID4, m))
self.stateCheck(self.dev5,
- level=lambda x, m: self.assertEqual(x.number, 5, m))
+ level=lambda x, m: self.assertEqual(x.number, 5, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID5, m))
self.stateCheck(self.dev6,
- level=lambda x, m: self.assertEqual(x.number, 6, m))
+ level=lambda x, m: self.assertEqual(x.number, 6, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID6, m))
self.stateCheck(self.dev7,
- level=lambda x, m: self.assertEqual(x.number, 10, m))
+ level=lambda x, m: self.assertEqual(x.number, 10, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID10, m))
##
## existing device tests
@@ -259,7 +268,8 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
self.stateCheck(self.dev8,
exists=self.assertTrue,
level=lambda x, m: self.assertEqual(x.number, 1, m),
- metadataVersion=self.assertIsNone)
+ metadataVersion=self.assertIsNone,
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID1, m))
##
@@ -274,6 +284,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
memberDevices=lambda x, m: self.assertEqual(x, 2, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
partitionable=self.assertTrue,
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID0, m),
totalDevices=lambda x, m: self.assertEqual(x, 2, m),
type = lambda x, m: self.assertEqual(x,
"mdbiosraidarray", m))
@@ -283,6 +294,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
self.stateCheck(self.dev10,
createBitmap=self.assertFalse,
level=lambda x, m: self.assertEqual(x.number, 0, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID0, m),
targetSize=lambda x, m: self.assertEqual(x, Size("32
MiB"), m))
self.stateCheck(self.dev11,
@@ -293,6 +305,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
memberDevices=lambda x, m: self.assertEqual(x, 2, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
partitionable=self.assertTrue,
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID1, m),
targetSize=lambda x, m: self.assertEqual(x, Size("32
MiB"), m),
totalDevices=lambda x, m: self.assertEqual(x, 2, m),
type=lambda x, m: self.assertEqual(x,
"mdbiosraidarray", m))
@@ -305,6 +318,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
memberDevices=lambda x, m: self.assertEqual(x, 2, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
partitionable=self.assertTrue,
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID1, m),
targetSize=lambda x, m: self.assertEqual(x, Size("32
MiB"), m),
totalDevices=lambda x, m: self.assertEqual(x, 2, m),
type = lambda x, m: self.assertEqual(x,
"mdbiosraidarray", m))
@@ -315,6 +329,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 0, m),
memberDevices=lambda x, m: self.assertEqual(x, 3, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID0, m),
size=lambda x, m: self.assertEqual(x, Size("3 MiB"),
m),
targetSize=lambda x, m: self.assertEqual(x, Size("32
MiB"), m),
totalDevices=lambda x, m: self.assertEqual(x, 3, m))
@@ -325,6 +340,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 4, m),
memberDevices=lambda x, m: self.assertEqual(x, 3, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID4, m),
size=lambda x, m: self.assertEqual(x, Size("2 MiB"),
m),
totalDevices=lambda x, m: self.assertEqual(x, 3, m))
@@ -334,6 +350,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 5, m),
memberDevices=lambda x, m: self.assertEqual(x, 3, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID5, m),
size=lambda x, m: self.assertEqual(x, Size("2 MiB"),
m),
totalDevices=lambda x, m: self.assertEqual(x, 3, m))
@@ -343,6 +360,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 6, m),
memberDevices=lambda x, m: self.assertEqual(x, 4, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID6, m),
size=lambda x, m: self.assertEqual(x, Size("2 MiB"),
m),
totalDevices=lambda x, m: self.assertEqual(x, 4, m))
@@ -352,6 +370,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 10, m),
memberDevices=lambda x, m: self.assertEqual(x, 4, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID10, m),
size=lambda x, m: self.assertEqual(x, Size("2 MiB"),
m),
totalDevices=lambda x, m: self.assertEqual(x, 4, m))
@@ -361,6 +380,7 @@ class MDRaidArrayDeviceTestCase(DeviceStateTestCase):
level=lambda x, m: self.assertEqual(x.number, 10, m),
memberDevices=lambda x, m: self.assertEqual(x, 4, m),
parents=lambda x, m: self.assertNotEqual(x, [], m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.RAID10, m),
size=lambda x, m: self.assertEqual(x, Size("2 MiB"),
m),
spares=lambda x, m: self.assertEqual(x, 1, m),
totalDevices=lambda x, m: self.assertEqual(x, 5, m))
@@ -437,6 +457,7 @@ class BTRFSDeviceTestCase(DeviceStateTestCase):
"partitionable" : self.assertFalse,
"path" : lambda x, m: self.assertRegexpMatches(x, "^/dev",
m),
"resizable" : lambda x, m: self.assertFalse,
+ "raidLevel" : self.assertIsNone,
"size" : lambda x, m: self.assertEqual(x, Size(0), m),
"status" : self.assertFalse,
"sysfsPath" : lambda x, m: self.assertEqual(x, "", m),
@@ -465,12 +486,14 @@ class BTRFSDeviceTestCase(DeviceStateTestCase):
self.stateCheck(self.dev1,
parents=lambda x, m: self.assertEqual(len(x), 1, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.Single, m),
type=lambda x, m: self.assertEqual(x, "btrfs volume", m))
self.stateCheck(self.dev3,
currentSize=lambda x, m: self.assertEqual(x, Size("32 MiB"), m),
maxSize=lambda x, m: self.assertEqual(x, Size("32 MiB"), m),
parents=lambda x, m: self.assertEqual(len(x), 1, m),
+ raidLevel=lambda x, m: self.assertEqual(x, raid.Single, m),
size=lambda x, m: self.assertEqual(x, Size("32 MiB"), m),
type=lambda x, m: self.assertEqual(x, "btrfs volume", m))
--
1.8.3.1