diff --git a/diskimage_builder/block_device/level1/lvm.py b/diskimage_builder/block_device/level1/lvm.py index 1b6bfa297..16842c989 100644 --- a/diskimage_builder/block_device/level1/lvm.py +++ b/diskimage_builder/block_device/level1/lvm.py @@ -20,7 +20,6 @@ from diskimage_builder.block_device.plugin import NodeBase from diskimage_builder.block_device.plugin import PluginBase from diskimage_builder.block_device.utils import exec_sudo from diskimage_builder.block_device.utils import parse_abs_size_spec -from diskimage_builder.block_device.utils import remove_device PHYSICAL_EXTENT_BYTES = parse_abs_size_spec('4MiB') LVS_TYPES = ['thin', 'thin-pool'] @@ -70,6 +69,27 @@ logger = logging.getLogger(__name__) # call that is driven by the LVSNode object. +def lvremove(device_name): + logger.debug('Removing logical volume %s', device_name) + try: + exec_sudo(["lvchange", "--activate", "n", device_name]) + exec_sudo(["lvremove", "--yes", "/dev/%s" % device_name]) + except BlockDeviceSetupException as e: + # Do not raise an error - maybe other cleanup methods + # can at least do some more work. + logger.warning("Removing logical volume failed (%s)", e.returncode) + + +def vgremove(vg_name): + logger.debug('Removing volume group %s', vg_name) + try: + exec_sudo(["vgremove", "--yes", "--force", vg_name]) + except BlockDeviceSetupException as e: + # Do not raise an error - maybe other cleanup methods + # can at least do some more work. + logger.warning("Removing volume group failed (%s)", e.returncode) + + class PvsNode(NodeBase): def __init__(self, name, state, base, options): """Physical volume @@ -150,6 +170,7 @@ class VgsNode(NodeBase): logger.debug("Creating vg command [%s]", cmd) exec_sudo(cmd) + self.add_rollback(vgremove, self.name) # save state if 'vgs' not in self.state: self.state['vgs'] = {} @@ -232,7 +253,7 @@ class LvsNode(NodeBase): 'opts': self.options, 'device': '/dev/mapper/%s' % device_name } - self.add_rollback(remove_device, device_name) + self.add_rollback(lvremove, "%s/%s" % (self.base, self.name)) def _umount(self): exec_sudo(['lvchange', '-an',