objects: vlan field to NetworkInterfaceMetadata object

Adding a new 'vlan' field to the NetworkInterfaceMetadata object
to expose the vlan assigned to a virtual interface, to devices metadata.

Implements: blueprint sriov-pf-passthrough-neutron-port-vlan
Change-Id: I0071474191b6304a87661f73c63e6eeef9a01ac7
This commit is contained in:
Vladik Romanovsky 2016-11-30 19:55:04 -05:00
parent 045f08ab8a
commit 2ace67115b
3 changed files with 23 additions and 3 deletions

View File

@ -13,6 +13,7 @@
# under the License.
from oslo_serialization import jsonutils
from oslo_utils import versionutils
from nova import db
from nova.objects import base
@ -72,12 +73,20 @@ class DeviceMetadata(base.NovaObject):
@base.NovaObjectRegistry.register
class NetworkInterfaceMetadata(DeviceMetadata):
VERSION = '1.0'
# Version 1.0: Initial version
# Version 1.1: Add vlans field
VERSION = '1.1'
fields = {
'mac': fields.MACAddressField(),
'vlan': fields.IntegerField(),
}
def obj_make_compatible(self, primitive, target_version):
target_version = versionutils.convert_version_to_tuple(target_version)
if target_version < (1, 1) and 'vlan' in primitive:
del primitive['vlan']
@base.NovaObjectRegistry.register
class DiskMetadata(DeviceMetadata):

View File

@ -19,7 +19,8 @@ from nova.tests.unit.objects import test_objects
fake_net_interface_meta = objects.NetworkInterfaceMetadata(
mac='52:54:00:f6:35:8f',
tags=['mytag1'],
bus=objects.PCIDeviceBus(address='0000:00:03.0'))
bus=objects.PCIDeviceBus(address='0000:00:03.0'),
vlan=1000)
fake_pci_disk_meta = objects.DiskMetadata(
bus=objects.PCIDeviceBus(address='0000:00:09.0'),
tags=['nfvfunc3'])
@ -58,6 +59,7 @@ class _TestInstanceDeviceMetadata(object):
self.assertEqual(obj_meta.tags, ['mytag1'])
self.assertTrue(obj_meta.bus, objects.PCIDeviceBus)
self.assertEqual(obj_meta.bus.address, '0000:00:03.0')
self.assertEqual(obj_meta.vlan, 1000)
elif isinstance(obj_meta, objects.DiskMetadata):
self.assertTrue(obj_meta.bus, objects.PCIDeviceBus)
self.assertEqual(obj_meta.bus.address, '0000:00:09.0')
@ -80,6 +82,15 @@ class _TestInstanceDeviceMetadata(object):
for obj_meta in metadata.devices:
self._check_object(obj_meta)
def test_net_if_compatible_pre_1_1(self):
vif_obj = objects.NetworkInterfaceMetadata(mac='52:54:00:f6:35:8f')
vif_obj.tags = ['test']
vif_obj.vlan = 1000
primitive = vif_obj.obj_to_primitive()
self.assertIn('vlan', primitive['nova_object.data'])
vif_obj.obj_make_compatible(primitive['nova_object.data'], '1.0')
self.assertNotIn('vlan', primitive['nova_object.data'])
class TestInstanceDeviceMetadata(test_objects._LocalTest,
_TestInstanceDeviceMetadata):

View File

@ -1132,7 +1132,7 @@ object_data = {
'NUMATopology': '1.2-c63fad38be73b6afd04715c9c1b29220',
'NUMATopologyLimits': '1.0-9463e0edd40f64765ae518a539b9dfd2',
'Network': '1.2-a977ab383aa462a479b2fae8211a5dde',
'NetworkInterfaceMetadata': '1.0-99a9574d086feb5ad45cd04a34855647',
'NetworkInterfaceMetadata': '1.1-3269ce11b30531eb1febfa5173b78b81',
'NetworkList': '1.2-69eca910d8fa035dfecd8ba10877ee59',
'NetworkRequest': '1.2-af1ff2d986999fbb79377712794d82aa',
'NetworkRequestList': '1.1-15ecf022a68ddbb8c2a6739cfc9f8f5e',