Add generic clear and delete methods to FilesystemController
The guided "use a whole disk" flow in reusing existing partitions is going to need to be able to generically destroy the existing users of a disk, something that subiquity does not currently let you do (you can't delete a RAID if is part of another RAID, for example). So add generic ways of clearing and deleting objects.
This commit is contained in:
parent
d1c6bf47bc
commit
2585b4eff0
|
@ -283,6 +283,7 @@ class FilesystemController(BaseController):
|
||||||
return
|
return
|
||||||
self.delete_mount(fs.mount())
|
self.delete_mount(fs.mount())
|
||||||
self.model.remove_filesystem(fs)
|
self.model.remove_filesystem(fs)
|
||||||
|
delete_format = delete_filesystem
|
||||||
|
|
||||||
def create_partition(self, device, spec, flag="", wipe=None):
|
def create_partition(self, device, spec, flag="", wipe=None):
|
||||||
part = self.model.add_partition(device, spec["size"], flag, wipe)
|
part = self.model.add_partition(device, spec["size"], flag, wipe)
|
||||||
|
@ -290,7 +291,7 @@ class FilesystemController(BaseController):
|
||||||
return part
|
return part
|
||||||
|
|
||||||
def delete_partition(self, part):
|
def delete_partition(self, part):
|
||||||
self.delete_filesystem(part.fs())
|
self.clear(part)
|
||||||
self.model.remove_partition(part)
|
self.model.remove_partition(part)
|
||||||
|
|
||||||
def _create_boot_partition(self, disk):
|
def _create_boot_partition(self, disk):
|
||||||
|
@ -324,7 +325,7 @@ class FilesystemController(BaseController):
|
||||||
|
|
||||||
def create_raid(self, spec):
|
def create_raid(self, spec):
|
||||||
for d in spec['devices']:
|
for d in spec['devices']:
|
||||||
self.delete_filesystem(d.fs())
|
self.clear(d)
|
||||||
raid = self.model.add_raid(
|
raid = self.model.add_raid(
|
||||||
spec['name'],
|
spec['name'],
|
||||||
spec['level'].value,
|
spec['level'].value,
|
||||||
|
@ -335,8 +336,7 @@ class FilesystemController(BaseController):
|
||||||
def delete_raid(self, raid):
|
def delete_raid(self, raid):
|
||||||
if raid is None:
|
if raid is None:
|
||||||
return
|
return
|
||||||
self.delete_raid(raid.constructed_device()) # XXX
|
self.clear(raid)
|
||||||
self.delete_filesystem(raid.fs())
|
|
||||||
for p in list(raid.partitions()):
|
for p in list(raid.partitions()):
|
||||||
self.delete_partition(p)
|
self.delete_partition(p)
|
||||||
self.model.remove_raid(raid)
|
self.model.remove_raid(raid)
|
||||||
|
@ -345,7 +345,7 @@ class FilesystemController(BaseController):
|
||||||
devices = set()
|
devices = set()
|
||||||
key = spec.get('password')
|
key = spec.get('password')
|
||||||
for device in spec['devices']:
|
for device in spec['devices']:
|
||||||
self.delete_filesystem(device.fs())
|
self.clear(device)
|
||||||
if key:
|
if key:
|
||||||
device = self.model.add_dm_crypt(device, key)
|
device = self.model.add_dm_crypt(device, key)
|
||||||
devices.add(device)
|
devices.add(device)
|
||||||
|
@ -371,10 +371,19 @@ class FilesystemController(BaseController):
|
||||||
create_lvm_partition = create_logical_volume
|
create_lvm_partition = create_logical_volume
|
||||||
|
|
||||||
def delete_logical_volume(self, lv):
|
def delete_logical_volume(self, lv):
|
||||||
self.delete_filesystem(lv.fs())
|
self.clear(lv)
|
||||||
self.model.remove_logical_volume(lv)
|
self.model.remove_logical_volume(lv)
|
||||||
delete_lvm_partition = delete_logical_volume
|
delete_lvm_partition = delete_logical_volume
|
||||||
|
|
||||||
|
def delete(self, obj):
|
||||||
|
if obj is None:
|
||||||
|
return
|
||||||
|
getattr(self, 'delete_' + obj.type)(obj)
|
||||||
|
|
||||||
|
def clear(self, obj):
|
||||||
|
for subobj in obj.fs(), obj.constructed_device():
|
||||||
|
self.delete(subobj)
|
||||||
|
|
||||||
def partition_disk_handler(self, disk, partition, spec):
|
def partition_disk_handler(self, disk, partition, spec):
|
||||||
log.debug('partition_disk_handler: %s %s %s', disk, partition, spec)
|
log.debug('partition_disk_handler: %s %s %s', disk, partition, spec)
|
||||||
log.debug('disk.freespace: {}'.format(disk.free_for_partitions))
|
log.debug('disk.freespace: {}'.format(disk.free_for_partitions))
|
||||||
|
@ -422,7 +431,7 @@ class FilesystemController(BaseController):
|
||||||
|
|
||||||
def add_format_handler(self, volume, spec):
|
def add_format_handler(self, volume, spec):
|
||||||
log.debug('add_format_handler %s %s', volume, spec)
|
log.debug('add_format_handler %s %s', volume, spec)
|
||||||
self.delete_filesystem(volume.fs())
|
self.clear(volume)
|
||||||
self.create_filesystem(volume, spec)
|
self.create_filesystem(volume, spec)
|
||||||
|
|
||||||
def raid_handler(self, existing, spec):
|
def raid_handler(self, existing, spec):
|
||||||
|
@ -431,7 +440,7 @@ class FilesystemController(BaseController):
|
||||||
for d in existing.devices | existing.spare_devices:
|
for d in existing.devices | existing.spare_devices:
|
||||||
d._constructed_device = None
|
d._constructed_device = None
|
||||||
for d in spec['devices'] | spec['spare_devices']:
|
for d in spec['devices'] | spec['spare_devices']:
|
||||||
self.delete_filesystem(d.fs())
|
self.clear(d)
|
||||||
d._constructed_device = existing
|
d._constructed_device = existing
|
||||||
existing.name = spec['name']
|
existing.name = spec['name']
|
||||||
existing.raidlevel = spec['level'].value
|
existing.raidlevel = spec['level'].value
|
||||||
|
@ -450,7 +459,7 @@ class FilesystemController(BaseController):
|
||||||
d._constructed_device = None
|
d._constructed_device = None
|
||||||
devices = set()
|
devices = set()
|
||||||
for d in spec['devices']:
|
for d in spec['devices']:
|
||||||
self.delete_filesystem(d.fs())
|
self.clear(d)
|
||||||
if key:
|
if key:
|
||||||
d = self.model.add_dm_crypt(d, key)
|
d = self.model.add_dm_crypt(d, key)
|
||||||
d._constructed_device = existing
|
d._constructed_device = existing
|
||||||
|
|
|
@ -63,7 +63,7 @@ class ConfirmDeleteStretchy(Stretchy):
|
||||||
super().__init__(title, widgets, 0, 2)
|
super().__init__(title, widgets, 0, 2)
|
||||||
|
|
||||||
def confirm(self, sender=None):
|
def confirm(self, sender=None):
|
||||||
getattr(self.parent.controller, 'delete_' + self.obj.type)(self.obj)
|
self.parent.controller.delete(self.obj)
|
||||||
self.parent.refresh_model_inputs()
|
self.parent.refresh_model_inputs()
|
||||||
self.parent.remove_overlay()
|
self.parent.remove_overlay()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue