Replace dpdk driver to vfio-pci if sriov is enabled

Change-Id: Ic87b926b4f547f91b2f130830b35fafc195ada92
Partial-Bug: #1583077
(cherry picked from commit 53f2fe91c9)
This commit is contained in:
Anastasiya 2016-12-15 17:22:18 +04:00
parent ba2f0bb4c2
commit 9c984a1ad3
3 changed files with 19 additions and 2 deletions

View File

@ -529,3 +529,5 @@ HYPERVISORS = Enum(
"kvm",
"qemu"
)
DPDK_DRIVER_IN_SRIOV_CASE = 'vfio-pci'

View File

@ -17,6 +17,7 @@
import six
from sqlalchemy.sql import not_
from nailgun import consts
from nailgun.db import db
from nailgun.db.sqlalchemy import models
from nailgun.objects import Cluster
@ -70,9 +71,13 @@ class NIC(DPDKMixin, NailgunObject):
@classmethod
def get_dpdk_driver(cls, instance, dpdk_drivers):
from nailgun.objects import Node
pci_id = instance.interface_properties.get('pci_id', '').lower()
sriov_enabled = Node.sriov_enabled(instance.node)
for driver, device_ids in six.iteritems(dpdk_drivers):
if pci_id in device_ids:
if sriov_enabled:
return consts.DPDK_DRIVER_IN_SRIOV_CASE
return driver
return None

View File

@ -123,7 +123,8 @@ class TestDeploymentAttributesSerialization90(
return consts.DEFAULT_BRIDGES_NAMES.br_mesh
@mock.patch('nailgun.objects.Release.get_supported_dpdk_drivers')
def _check_dpdk_serializing(self, drivers_mock, has_vlan_tag=False):
def _check_dpdk_serializing(self, drivers_mock, has_vlan_tag=False,
sriov=False):
drivers_mock.return_value = {
'driver_1': ['test_id:1', 'test_id:2']
}
@ -131,6 +132,9 @@ class TestDeploymentAttributesSerialization90(
1, 3,
cluster_id=self.cluster_db.id,
roles=['compute'])[0]
node.interfaces[0].interface_properties['sriov']['enabled'] = sriov
if has_vlan_tag:
objects.NetworkGroup.get_node_network_by_name(
node, 'private').vlan_start = '103'
@ -178,11 +182,17 @@ class TestDeploymentAttributesSerialization90(
interfaces = serialised_node['network_scheme']['interfaces']
dpdk_interface = interfaces[dpdk_interface_name]
vendor_specific = dpdk_interface.get('vendor_specific', {})
self.assertEqual(vendor_specific.get('dpdk_driver'), 'driver_1')
if sriov:
self.assertEqual(vendor_specific.get('dpdk_driver'), 'vfio-pci')
else:
self.assertEqual(vendor_specific.get('dpdk_driver'), 'driver_1')
def test_serialization_with_dpdk(self):
self._check_dpdk_serializing()
def test_serialization_with_dpdk_sriov(self):
self._check_dpdk_serializing(sriov=True)
def test_serialization_with_dpdk_vxlan(self):
self._create_cluster_with_vxlan()
self._check_dpdk_serializing()