From 0f640dd33996c53e38e141bb30b0f5fa9d56e829 Mon Sep 17 00:00:00 2001 From: Kravchenko Pavel Date: Tue, 18 Dec 2012 15:56:57 +0200 Subject: Make libvirt driver.listinstances return defined Currently the Libvirt driver list_instances doesn't return defined instances. Those instances required during host initialization for blueprint rebuild-for-ha DocImpact Change-Id: Ifb8f703daa4962f4570c53c75c3d66bc5e5132e7 Co-authored-by: Oshrit Feder --- nova/tests/fakelibvirt.py | 3 +++ nova/tests/test_libvirt.py | 16 ++++++++++++++++ nova/virt/libvirt/driver.py | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/nova/tests/fakelibvirt.py b/nova/tests/fakelibvirt.py index 7c9d5b238..8d9561c7e 100644 --- a/nova/tests/fakelibvirt.py +++ b/nova/tests/fakelibvirt.py @@ -839,6 +839,9 @@ class Connection(object): nwfilter = NWFilter(self, xml) self._add_filter(nwfilter) + def listDefinedDomains(self): + return [] + def openReadOnly(uri): return Connection(uri, readonly=True) diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py index fbafe27f3..0373fe48c 100644 --- a/nova/tests/test_libvirt.py +++ b/nova/tests/test_libvirt.py @@ -1072,6 +1072,7 @@ class LibvirtConnTestCase(test.TestCase): libvirt_driver.LibvirtDriver._conn.lookupByID = self.fake_lookup libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 2 libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: [0, 1] + libvirt_driver.LibvirtDriver._conn.listDefinedDomains = lambda: [] self.mox.ReplayAll() conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) @@ -1079,6 +1080,19 @@ class LibvirtConnTestCase(test.TestCase): # Only one should be listed, since domain with ID 0 must be skiped self.assertEquals(len(instances), 1) + def test_list_defined_instances(self): + self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn') + libvirt_driver.LibvirtDriver._conn.lookupByID = self.fake_lookup + libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 1 + libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: [0] + libvirt_driver.LibvirtDriver._conn.listDefinedDomains = lambda: [1] + + self.mox.ReplayAll() + conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) + instances = conn.list_instances() + # Only one defined domain should be listed + self.assertEquals(len(instances), 1) + def test_list_instances_when_instance_deleted(self): def fake_lookup(instance_name): @@ -1088,6 +1102,7 @@ class LibvirtConnTestCase(test.TestCase): libvirt_driver.LibvirtDriver._conn.lookupByID = fake_lookup libvirt_driver.LibvirtDriver._conn.numOfDomains = lambda: 1 libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: [0, 1] + libvirt_driver.LibvirtDriver._conn.listDefinedDomains = lambda: [] self.mox.ReplayAll() conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) @@ -1202,6 +1217,7 @@ class LibvirtConnTestCase(test.TestCase): libvirt_driver.LibvirtDriver._conn.listDomainsID = lambda: range(4) libvirt_driver.LibvirtDriver._conn.lookupByID = fake_lookup libvirt_driver.LibvirtDriver._conn.lookupByName = fake_lookup_name + libvirt_driver.LibvirtDriver._conn.listDefinedDomains = lambda: [] self.mox.ReplayAll() conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 263fd5ca4..e8dee77e1 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -447,6 +447,11 @@ class LibvirtDriver(driver.ComputeDriver): except libvirt.libvirtError: # Instance was deleted while listing... ignore it pass + + # extend instance list to contain also defined domains + names.extend([vm for vm in self._conn.listDefinedDomains() + if vm not in names]) + return names def plug_vifs(self, instance, network_info): -- cgit