From c6ddff821fef8d9edfc7498dbe19d5794d9adc8f Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 14 Sep 2012 10:43:13 -0700 Subject: Allow older versions of libvirt to delete vms Libvirt < 0.9.4 doesn't support undefineFlags, so the vms can't be deleted. This patch adds a workaround to fallback to the old style of undefine if undefineFlags throws an Attribute error. It also attempts to remove any managed save images that exist. Fixes bug 1051010 Change-Id: I155fe2ab3be347b1515c5aab4a9233921bd722ca --- nova/virt/libvirt/driver.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'nova/virt') diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 9b6e6e9b4..7632ad960 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -501,10 +501,20 @@ class LibvirtDriver(driver.ComputeDriver): try: virt_dom.undefineFlags( libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE) - except libvirt.libvirtError as e: + except libvirt.libvirtError: LOG.debug(_("Error from libvirt during undefineFlags." " Retrying with undefine"), instance=instance) virt_dom.undefine() + except AttributeError: + # NOTE(vish): Older versions of libvirt don't support + # undefine flags, so attempt to do the + # right thing. + try: + if virt_dom.hasManagedSaveImage(0): + virt_dom.managedSaveRemove(0) + except AttributeError: + pass + virt_dom.undefine() except libvirt.libvirtError as e: errcode = e.get_error_code() LOG.error(_("Error from libvirt during undefine. " -- cgit