diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-09-14 10:43:13 -0700 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-09-14 12:26:03 -0700 |
| commit | c6ddff821fef8d9edfc7498dbe19d5794d9adc8f (patch) | |
| tree | 63acd9cc04c3bf8dcaf009f8f8ef9d4d1ebb0b42 /nova/virt | |
| parent | c1af117628e1010f17931487785422a284687151 (diff) | |
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
Diffstat (limited to 'nova/virt')
| -rw-r--r-- | nova/virt/libvirt/driver.py | 12 |
1 files changed, 11 insertions, 1 deletions
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. " |
