From 147e592f0773d6e08c87eedde633a29ddc656b7d Mon Sep 17 00:00:00 2001 From: Sahid Orentino Ferdjaoui Date: Fri, 24 Apr 2015 11:35:00 -0400 Subject: [PATCH] libvirt: add method to get device by name to Host Add method "lookup_device_by_name" in Host and update the driver to use it instead of calling libvirt directly. Change-Id: I1642f839c5a0c22d8dc978c2a84906e2d3d8a051 --- nova/tests/unit/virt/libvirt/test_driver.py | 14 +++++++------- nova/tests/unit/virt/libvirt/test_host.py | 5 +++++ nova/virt/libvirt/driver.py | 6 +++--- nova/virt/libvirt/host.py | 8 ++++++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 56d87d116d..bd000e9432 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -8741,12 +8741,11 @@ class LibvirtConnTestCase(test.NoDBTestCase): def test_get_pcidev_info(self): - def fake_nodeDeviceLookupByName(name): + def fake_nodeDeviceLookupByName(self, name): return FakeNodeDevice(_fake_NodeDevXml[name]) - self.mox.StubOutWithMock(libvirt_driver.LibvirtDriver, '_conn') - libvirt_driver.LibvirtDriver._conn.nodeDeviceLookupByName =\ - fake_nodeDeviceLookupByName + self.mox.StubOutWithMock(host.Host, 'device_lookup_by_name') + host.Host.device_lookup_by_name = fake_nodeDeviceLookupByName drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) actualvf = drvr._get_pcidev_info("pci_0000_04_00_3") @@ -8826,11 +8825,12 @@ class LibvirtConnTestCase(test.NoDBTestCase): libvirt_driver.LibvirtDriver._conn.listDevices = fakelistDevices - def fake_nodeDeviceLookupByName(name): + def fake_nodeDeviceLookupByName(self, name): return FakeNodeDevice(_fake_NodeDevXml[name]) - libvirt_driver.LibvirtDriver._conn.nodeDeviceLookupByName =\ - fake_nodeDeviceLookupByName + self.mox.StubOutWithMock(host.Host, 'device_lookup_by_name') + host.Host.device_lookup_by_name = fake_nodeDeviceLookupByName + drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) actjson = drvr._get_pci_passthrough_devices() diff --git a/nova/tests/unit/virt/libvirt/test_host.py b/nova/tests/unit/virt/libvirt/test_host.py index d197f1217e..4721bb063b 100644 --- a/nova/tests/unit/virt/libvirt/test_host.py +++ b/nova/tests/unit/virt/libvirt/test_host.py @@ -831,6 +831,11 @@ Active: 8381604 kB self.host.write_instance_config(xml) mock_defineXML.assert_called_once_with(xml) + @mock.patch.object(fakelibvirt.virConnect, "nodeDeviceLookupByName") + def test_device_lookup_by_name(self, mock_nodeDeviceLookupByName): + self.host.device_lookup_by_name("foo") + mock_nodeDeviceLookupByName.assert_called_once_with("foo") + class DomainJobInfoTestCase(test.NoDBTestCase): diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 89e877e3ae..787b3afaf7 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -2853,7 +2853,7 @@ class LibvirtDriver(driver.ComputeDriver): for dev in pci_devices: libvirt_dev_addr = dev['hypervisor_name'] libvirt_dev = \ - self._conn.nodeDeviceLookupByName(libvirt_dev_addr) + self._host.device_lookup_by_name(libvirt_dev_addr) # Note(yjiang5) Spelling for 'dettach' is correct, see # http://libvirt.org/html/libvirt-libvirt.html. libvirt_dev.dettach() @@ -2864,7 +2864,7 @@ class LibvirtDriver(driver.ComputeDriver): for dev in pci_devices: libvirt_dev_addr = dev['hypervisor_name'] libvirt_dev = \ - self._conn.nodeDeviceLookupByName(libvirt_dev_addr) + self._host.device_lookup_by_name(libvirt_dev_addr) libvirt_dev.reset() except libvirt.libvirtError as exc: @@ -4632,7 +4632,7 @@ class LibvirtDriver(driver.ComputeDriver): 'phys_function': phys_address} return {'dev_type': 'type-PCI'} - virtdev = self._conn.nodeDeviceLookupByName(devname) + virtdev = self._host.device_lookup_by_name(devname) xmlstr = virtdev.XMLDesc(0) cfgdev = vconfig.LibvirtConfigNodeDevice() cfgdev.parse_str(xmlstr) diff --git a/nova/virt/libvirt/host.py b/nova/virt/libvirt/host.py index d4bce5864f..fbebd0d8b0 100644 --- a/nova/virt/libvirt/host.py +++ b/nova/virt/libvirt/host.py @@ -943,3 +943,11 @@ class Host(object): :returns: a virDomain instance """ return self.get_connection().defineXML(xml) + + def device_lookup_by_name(self, name): + """Lookup a node device by its name. + + + :returns: a virNodeDevice instance + """ + return self.get_connection().nodeDeviceLookupByName(name)