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:
parent
045f08ab8a
commit
2ace67115b
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue