The logical volume can not be removed when create VM error. I look at the code, found that parameter is a list in the libvirt's lvm, but in imagebackend, parameters passed is a string.
in the Libvirt's LVM
def remove_volumes(paths): ## #the path is list
"""Remove one or more logical volume."""
errors = []
for path in paths: clear_volume(path)
lvremove = ('lvremove', '-f', path)
try: utils.execute(*lvremove, attempts=3, run_as_root=True)
except processutils.ProcessExecutionError as exp: errors.append(str(exp))
if errors:
raise exception.VolumesNotRemoved(reason=(', ').join(errors))
in the imagebackend's LVM
@contextlib.contextmanager
def remove_volume_on_error(self, path):
try:
yield
except Exception:
with excutils.save_and_reraise_exception(): lvm.remove_volumes(path) ### the path is string
The logical volume can not be removed when create VM error. I look at the code, found that parameter is a list in the libvirt's lvm, but in imagebackend, parameters passed is a string.
in the Libvirt's LVM volumes( paths): ## #the path is list
def remove_
"""Remove one or more logical volume."""
errors = []
clear_ volume( path)
utils. execute( *lvremove, attempts=3, run_as_root=True) ProcessExecutio nError as exp:
errors. append( str(exp) ) VolumesNotRemov ed(reason= (', ').join(errors))
for path in paths:
lvremove = ('lvremove', '-f', path)
try:
except processutils.
if errors:
raise exception.
in the imagebackend's LVM contextmanager volume_ on_error( self, path): save_and_ reraise_ exception( ):
lvm.remove_ volumes( path) ### the path is string
@contextlib.
def remove_
try:
yield
except Exception:
with excutils.