allow reformatting of raids

This commit is contained in:
Michael Hudson-Doyle 2020-03-27 13:46:59 +13:00
parent 100661b60c
commit 7e69fe6d54
4 changed files with 29 additions and 3 deletions

View File

@ -521,7 +521,7 @@ class FilesystemController(SubiquityController):
def reformat(self, disk):
if disk.type == "disk":
disk.preserve = False
disk.wipe = 'superblock-recursive'
disk.wipe = 'superblock-recursive'
self.clear(disk)
for p in list(disk.partitions()):
self.delete(p)

View File

@ -994,6 +994,7 @@ class Raid(_Device):
DeviceAction.FORMAT,
DeviceAction.REMOVE,
DeviceAction.DELETE,
DeviceAction.REFORMAT,
]
@property
@ -1008,6 +1009,7 @@ class Raid(_Device):
return _generic_can_EDIT(self)
_can_PARTITION = Disk._can_PARTITION
_can_REFORMAT = Disk._can_REFORMAT
_can_FORMAT = property(
lambda self: len(self._partitions) == 0 and
self._constructed_device is None)

View File

@ -596,8 +596,31 @@ class TestFilesystemModel(unittest.TestCase):
self.assertActionNotPossible(raid3, DeviceAction.EDIT)
def test_raid_action_REFORMAT(self):
model, raid = make_model_and_raid()
self.assertActionNotSupported(raid, DeviceAction.REFORMAT)
model = make_model()
raid1 = make_raid(model)
self.assertActionNotPossible(raid1, DeviceAction.REFORMAT)
raid1p1 = make_partition(model, raid1)
self.assertActionPossible(raid1, DeviceAction.REFORMAT)
model.add_volgroup('vg0', {raid1p1})
self.assertActionNotPossible(raid1, DeviceAction.REFORMAT)
raid2 = make_raid(model)
raid2.preserve = True
self.assertActionNotPossible(raid2, DeviceAction.REFORMAT)
raid2p1 = make_partition(model, raid2, preserve=True)
self.assertActionPossible(raid2, DeviceAction.REFORMAT)
model.add_volgroup('vg1', {raid2p1})
self.assertActionNotPossible(raid2, DeviceAction.REFORMAT)
raid3 = make_raid(model)
model.add_volgroup('vg2', {raid3})
self.assertActionNotPossible(raid3, DeviceAction.REFORMAT)
raid4 = make_raid(model)
raid4.preserve = True
model.add_volgroup('vg2', {raid4})
self.assertActionNotPossible(raid4, DeviceAction.REFORMAT)
def test_raid_action_PARTITION(self):
model, raid = make_model_and_raid()

View File

@ -330,6 +330,7 @@ class DeviceList(WidgetWrap):
_raid_EDIT = _stretchy_shower(RaidStretchy)
_raid_PARTITION = _disk_PARTITION
_raid_FORMAT = _disk_FORMAT
_raid_REFORMAT = _disk_REFORMAT
_raid_REMOVE = _disk_REMOVE
_raid_DELETE = _partition_DELETE