lvm controller methods

This commit is contained in:
Michael Hudson-Doyle 2018-07-05 16:27:37 +12:00
parent 974985e56a
commit 0c7a1587a0
1 changed files with 56 additions and 0 deletions

View File

@ -265,6 +265,34 @@ class FilesystemController(BaseController):
self.delete_partition(p) self.delete_partition(p)
self.model.remove_raid(raid) self.model.remove_raid(raid)
def create_volgroup(self, spec):
for d in spec['devices']:
self.delete_filesystem(d.fs())
return self.model.add_volgroup(
name=spec['name'],
devices=spec['devices'])
create_lvm_volgroup = create_volgroup
def delete_volgroup(self, vg):
for lv in vg._partitions:
self.delete_logical_volume(lv)
self.model.remove_volgroup(vg)
delete_lvm_volgroup = delete_volgroup
def create_logical_volume(self, vg, spec):
lv = self.model.add_logical_volume(
vg=vg,
name=spec['name'],
size=spec['size'])
self.create_filesystem(lv, spec)
return lv
create_lvm_partition = create_logical_volume
def delete_logical_volume(self, lv):
self.delete_filesystem(lv.fs())
self.model.remove_logical_volume(lv)
delete_lvm_partition = delete_logical_volume
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))
@ -295,6 +323,21 @@ class FilesystemController(BaseController):
log.info("Successfully added partition") log.info("Successfully added partition")
def logical_volume_handler(self, vg, lv, spec):
log.debug('logical_volume_handler: %s %s %s', vg, lv, spec)
log.debug('vg.freespace: {}'.format(vg.free_for_partitions))
if lv is not None:
lv.name = spec['name']
lv.size = align_up(spec['size'])
if vg.free_for_partitions < 0:
raise Exception("lv size too large")
self.delete_filesystem(lv.fs())
self.create_filesystem(lv, spec)
return
self.create_logical_volume(vg, spec)
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.delete_filesystem(volume.fs())
@ -315,6 +358,19 @@ class FilesystemController(BaseController):
else: else:
self.create_raid(spec) self.create_raid(spec)
def volgroup_handler(self, existing, spec):
log.debug("volgroup_handler %s %s", existing, spec)
if existing is not None:
for d in existing.devices:
d._constructed_device = None
for d in spec['devices']:
self.delete_filesystem(d.fs())
d._constructed_device = existing
existing.name = spec['name']
existing.devices = spec['devices']
else:
self.create_volgroup(spec)
def make_boot_disk(self, new_boot_disk): def make_boot_disk(self, new_boot_disk):
boot_partition = None boot_partition = None
for disk in self.model.all_disks(): for disk in self.model.all_disks():