File 0001-Fix-nova-delete-with-EFI-booted-VMs.patch of Package openstack-nova
From 0ac51c4e57b47cc9f51dd231360af26ad663d6cb Mon Sep 17 00:00:00 2001
From: Gene Kuo <igene@igene.tw>
Date: Wed, 29 Jun 2016 21:40:54 +0800
Subject: [PATCH] Fix nova delete with EFI booted VMs
Currently for UEFI instance libvirt refuse to implicitly delete the
nvram file. Which will cause the instance unable to delete in arm64
UEFI instance.
This patch fix nova to force delete the nvram file.
Change-Id: I975f470ad597400f58da667c6c3083d4a606f254
Closes-Bug: #1567807
---
nova/tests/unit/virt/libvirt/fakelibvirt.py | 1 +
nova/tests/unit/virt/libvirt/test_driver.py | 6 +++---
nova/tests/unit/virt/libvirt/test_guest.py | 3 ++-
nova/virt/libvirt/guest.py | 3 ++-
4 files changed, 8 insertions(+), 5 deletions(-)
Index: nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/fakelibvirt.py
===================================================================
--- nova-13.1.3.dev8.orig/nova/tests/unit/virt/libvirt/fakelibvirt.py
+++ nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/fakelibvirt.py
@@ -68,6 +68,7 @@ VIR_DOMAIN_EVENT_SHUTDOWN = 6
VIR_DOMAIN_EVENT_PMSUSPENDED = 7
VIR_DOMAIN_UNDEFINE_MANAGED_SAVE = 1
+VIR_DOMAIN_UNDEFINE_NVRAM = 4
VIR_DOMAIN_AFFECT_CURRENT = 0
VIR_DOMAIN_AFFECT_LIVE = 1
Index: nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/test_driver.py
===================================================================
--- nova-13.1.3.dev8.orig/nova/tests/unit/virt/libvirt/test_driver.py
+++ nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/test_driver.py
@@ -10750,7 +10750,7 @@ class LibvirtConnTestCase(test.NoDBTestC
mock = self.mox.CreateMock(fakelibvirt.virDomain)
mock.ID()
mock.destroy()
- mock.undefineFlags(1).AndRaise(fakelibvirt.libvirtError('Err'))
+ mock.undefineFlags(5).AndRaise(fakelibvirt.libvirtError('Err'))
mock.ID().AndReturn(123)
mock.undefine()
@@ -10779,7 +10779,7 @@ class LibvirtConnTestCase(test.NoDBTestC
mock = self.mox.CreateMock(fakelibvirt.virDomain)
mock.ID()
mock.destroy()
- mock.undefineFlags(1).AndRaise(AttributeError())
+ mock.undefineFlags(5).AndRaise(AttributeError())
mock.hasManagedSaveImage(0).AndReturn(True)
mock.managedSaveRemove(0)
mock.undefine()
@@ -10809,7 +10809,7 @@ class LibvirtConnTestCase(test.NoDBTestC
mock = self.mox.CreateMock(fakelibvirt.virDomain)
mock.ID()
mock.destroy()
- mock.undefineFlags(1).AndRaise(AttributeError())
+ mock.undefineFlags(5).AndRaise(AttributeError())
mock.hasManagedSaveImage(0).AndRaise(AttributeError())
mock.undefine()
Index: nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/test_guest.py
===================================================================
--- nova-13.1.3.dev8.orig/nova/tests/unit/virt/libvirt/test_guest.py
+++ nova-13.1.3.dev8/nova/tests/unit/virt/libvirt/test_guest.py
@@ -151,7 +151,8 @@ class GuestTestCase(test.NoDBTestCase):
def test_delete_configuration(self):
self.guest.delete_configuration()
self.domain.undefineFlags.assert_called_once_with(
- fakelibvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE)
+ fakelibvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE |
+ fakelibvirt.VIR_DOMAIN_UNDEFINE_NVRAM)
def test_delete_configuration_exception(self):
self.domain.undefineFlags.side_effect = fakelibvirt.libvirtError(
Index: nova-13.1.3.dev8/nova/virt/libvirt/guest.py
===================================================================
--- nova-13.1.3.dev8.orig/nova/virt/libvirt/guest.py
+++ nova-13.1.3.dev8/nova/virt/libvirt/guest.py
@@ -217,7 +217,8 @@ class Guest(object):
"""Undefines a domain from hypervisor."""
try:
self._domain.undefineFlags(
- libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE)
+ libvirt.VIR_DOMAIN_UNDEFINE_MANAGED_SAVE |
+ libvirt.VIR_DOMAIN_UNDEFINE_NVRAM)
except libvirt.libvirtError:
LOG.debug("Error from libvirt during undefineFlags. %d"
"Retrying with undefine", self.id)