summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2019-04-05 01:01:13 +0000
committerGerrit Code Review <review@openstack.org>2019-04-05 01:01:13 +0000
commitd1f37ff8040d28ce14a39f58b899aaeac9fa0918 (patch)
treece2aa44d2523df896eb51dc8dcbde9f4e7b8238b
parentafe5f0d4de6d30f119c89c2cfd1bdf0f7c5b3de9 (diff)
parent97a806b7900d9e55ad15c10184d2bd48f23efff0 (diff)
downloadnova-d1f37ff8040d28ce14a39f58b899aaeac9fa0918.tar.gz
Merge "Libvirt: gracefully handle non-nic VFs" into stable/stein19.0.0.0rc219.0.0
-rw-r--r--nova/tests/unit/virt/libvirt/test_driver.py22
-rw-r--r--nova/virt/libvirt/driver.py16
2 files changed, 34 insertions, 4 deletions
diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py
index a3208facf2..abdd094323 100644
--- a/nova/tests/unit/virt/libvirt/test_driver.py
+++ b/nova/tests/unit/virt/libvirt/test_driver.py
@@ -15103,6 +15103,28 @@ class LibvirtConnTestCase(test.NoDBTestCase,
mock_get_net_name.called_once_with(parent_address)
mock_dev_lookup.called_once_with(dev_name)
+ @mock.patch.object(pci_utils, 'get_ifname_by_pci_address')
+ def test_get_pcidev_info_non_nic(self, mock_get_ifname):
+ self.stub_out('nova.virt.libvirt.host.Host.device_lookup_by_name',
+ lambda self, name: FakeNodeDevice(
+ _fake_NodeDevXml[name]))
+
+ drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
+ id = "pci_0000_04_10_7"
+ mock_get_ifname.side_effect = exception.PciDeviceNotFoundById(id=id)
+ actualvf = drvr._get_pcidev_info(id)
+ expect_vf = {
+ "dev_id": id,
+ "address": "0000:04:10.7",
+ "product_id": '1520',
+ "numa_node": None,
+ "vendor_id": '8086',
+ "label": 'label_8086_1520',
+ "dev_type": fields.PciDeviceType.SRIOV_VF,
+ 'parent_addr': '0000:04:00.3',
+ }
+ self.assertEqual(expect_vf, actualvf)
+
@mock.patch.object(pci_utils, 'get_ifname_by_pci_address',
return_value='ens1')
def test_get_pcidev_info(self, mock_get_ifname):
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 608ac87429..83f11ea933 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -6013,13 +6013,21 @@ class LibvirtDriver(driver.ComputeDriver):
fun_cap.device_addrs[0][1],
fun_cap.device_addrs[0][2],
fun_cap.device_addrs[0][3])
- return {
+ result = {
'dev_type': fields.PciDeviceType.SRIOV_VF,
'parent_addr': phys_address,
- 'parent_ifname':
- pci_utils.get_ifname_by_pci_address(
- pci_address, pf_interface=True),
}
+ parent_ifname = None
+ try:
+ parent_ifname = pci_utils.get_ifname_by_pci_address(
+ pci_address, pf_interface=True)
+ except exception.PciDeviceNotFoundById:
+ # NOTE(sean-k-mooney): we ignore this error as it
+ # is expected when the virtual function is not a NIC.
+ pass
+ if parent_ifname:
+ result['parent_ifname'] = parent_ifname
+ return result
return {'dev_type': fields.PciDeviceType.STANDARD}