summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorAlvaro Lopez Garcia <aloga@ifca.unican.es>2012-01-16 17:12:35 +0100
committerAlvaro Lopez Garcia <aloga@ifca.unican.es>2012-01-18 14:44:05 +0100
commit0c2eb242580caff24dc95a9e2b3092cf0b04e958 (patch)
tree0d6e39c0fd1daa986146a759087a7c069db92210 /nova
parentd49d4b98f950b896ee9cfb9890b863d008f09a01 (diff)
downloadnova-0c2eb242580caff24dc95a9e2b3092cf0b04e958.tar.gz
nova-0c2eb242580caff24dc95a9e2b3092cf0b04e958.tar.xz
nova-0c2eb242580caff24dc95a9e2b3092cf0b04e958.zip
Fixed bug 912701
Add an check to the list_instances method so that the domains whose ID is 0 are not listed, since this is reserved in libvirt for hypervisors. Refers to https://lists.launchpad.net/openstack/msg06699.html Change-Id: I55f6f370cbaf8bd2254e08afad8b36d833726817
Diffstat (limited to 'nova')
-rw-r--r--nova/tests/fakelibvirt.py2
-rw-r--r--nova/tests/test_libvirt.py14
-rw-r--r--nova/virt/libvirt/connection.py3
3 files changed, 17 insertions, 2 deletions
diff --git a/nova/tests/fakelibvirt.py b/nova/tests/fakelibvirt.py
index e47830e5c..309a6f10f 100644
--- a/nova/tests/fakelibvirt.py
+++ b/nova/tests/fakelibvirt.py
@@ -433,7 +433,7 @@ class Connection(object):
self._uri = uri
self._vms = {}
self._running_vms = {}
- self._id_counter = 0
+ self._id_counter = 1 # libvirt reserves 0 for the hypervisor.
self._nwfilters = {}
def _add_filter(self, nwfilter):
diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index 1490f9173..894ac583e 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -91,6 +91,9 @@ class FakeVirtDomain(object):
</domain>
"""
+ def name(self):
+ return "fake-domain %s" % self
+
def snapshotCreateXML(self, *args):
return FakeVirDomainSnapshot(self)
@@ -401,6 +404,17 @@ class LibvirtConnTestCase(test.TestCase):
self._check_xml_and_disk_bus({"disk_format": "iso"},
"cdrom", "ide")
+ def test_list_instances(self):
+ self.mox.StubOutWithMock(connection.LibvirtConnection, '_conn')
+ connection.LibvirtConnection._conn.lookupByID = self.fake_lookup
+ connection.LibvirtConnection._conn.listDomainsID = lambda: [0, 1]
+
+ self.mox.ReplayAll()
+ conn = connection.LibvirtConnection(False)
+ instances = conn.list_instances()
+ # Only one should be listed, since domain with ID 0 must be skiped
+ self.assertEquals(len(instances), 1)
+
@test.skip_if(missing_libvirt(), "Test requires libvirt")
def test_snapshot_in_ami_format(self):
self.flags(image_service='nova.image.fake.FakeImageService')
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index 4e5c86ea4..1a179b16b 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -268,7 +268,8 @@ class LibvirtConnection(driver.ComputeDriver):
def list_instances(self):
return [self._conn.lookupByID(x).name()
- for x in self._conn.listDomainsID()]
+ for x in self._conn.listDomainsID()
+ if x != 0] # We skip domains with ID 0 (hypervisors).
@staticmethod
def _map_to_instance_info(domain):