diff options
| author | Gary Kotton <gkotton@redhat.com> | 2012-12-08 08:54:16 +0000 |
|---|---|---|
| committer | Gary Kotton <gkotton@redhat.com> | 2012-12-09 18:53:42 +0000 |
| commit | 85f857e62a5edacbf467c19add6e51565ae3669f (patch) | |
| tree | c7845aaa9a9c7241a477d10aa1bee37e40353320 /nova | |
| parent | 260dd4f1c714486634422254c6c1163696d43bfb (diff) | |
| download | nova-85f857e62a5edacbf467c19add6e51565ae3669f.tar.gz nova-85f857e62a5edacbf467c19add6e51565ae3669f.tar.xz nova-85f857e62a5edacbf467c19add6e51565ae3669f.zip | |
Add vif_type to the VIF model
This is part of blueprint vif-plugging-improvements.
The patch has two parts:
1. Add support for vif_type to the VIF model
2. Read the vif_type from the Quantum port binding
The patch is backward compatible, that is, a quantum plugin
does not need to return the vif_type.
Change-Id: Ice772f00b22163da98b98a2c69a0a4ad3f5526ff
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/network/model.py | 5 | ||||
| -rw-r--r-- | nova/network/quantumv2/api.py | 3 | ||||
| -rw-r--r-- | nova/tests/network/test_manager.py | 1 | ||||
| -rw-r--r-- | nova/tests/network/test_network_info.py | 26 |
4 files changed, 33 insertions, 2 deletions
diff --git a/nova/network/model.py b/nova/network/model.py index fc20489b5..f427a04bd 100644 --- a/nova/network/model.py +++ b/nova/network/model.py @@ -194,12 +194,14 @@ class Network(Model): class VIF(Model): """Represents a Virtual Interface in Nova""" - def __init__(self, id=None, address=None, network=None, **kwargs): + def __init__(self, id=None, address=None, network=None, type=None, + **kwargs): super(VIF, self).__init__() self['id'] = id self['address'] = address self['network'] = network or None + self['type'] = type self._set_meta(kwargs) @@ -363,6 +365,7 @@ class NetworkInfo(list): info_dict = {'label': network['label'], 'broadcast': str(subnet_v4.as_netaddr().broadcast), 'mac': vif['address'], + 'vif_type': vif['type'], 'vif_uuid': vif['id'], 'rxtx_cap': vif.get_meta('rxtx_cap', 0), 'dns': [get_ip(ip) for ip in subnet_v4['dns']], diff --git a/nova/network/quantumv2/api.py b/nova/network/quantumv2/api.py index 8c802b9fc..180d14c0f 100644 --- a/nova/network/quantumv2/api.py +++ b/nova/network/quantumv2/api.py @@ -574,7 +574,8 @@ class API(base.Base): nw_info.append(network_model.VIF( id=port['id'], address=port['mac_address'], - network=network)) + network=network, + type=port.get('binding:vif_type'))) return nw_info def _get_subnets_from_port(self, context, port): diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py index 700b74141..596c88f13 100644 --- a/nova/tests/network/test_manager.py +++ b/nova/tests/network/test_manager.py @@ -180,6 +180,7 @@ class FlatNetworkTestCase(test.TestCase): 'label': 'test%d' % nid, 'mac': 'DE:AD:BE:EF:00:%02x' % nid, 'rxtx_cap': 30, + 'vif_type': None, 'vif_uuid': '00000000-0000-0000-0000-00000000000000%02d' % nid, 'should_create_vlan': False, diff --git a/nova/tests/network/test_network_info.py b/nova/tests/network/test_network_info.py index c9b17306d..3e19a4461 100644 --- a/nova/tests/network/test_network_info.py +++ b/nova/tests/network/test_network_info.py @@ -259,6 +259,19 @@ class VIFTests(test.TestCase): self.assertEqual(vif['network'], fake_network_cache_model.new_network()) + def test_create_vif_with_type(self): + vif_dict = dict( + id=1, + address='aa:aa:aa:aa:aa:aa', + network=fake_network_cache_model.new_network(), + type='bridge') + vif = fake_network_cache_model.new_vif(vif_dict) + self.assertEqual(vif['id'], 1) + self.assertEqual(vif['address'], 'aa:aa:aa:aa:aa:aa') + self.assertEqual(vif['type'], 'bridge') + self.assertEqual(vif['network'], + fake_network_cache_model.new_network()) + def test_vif_get_fixed_ips(self): vif = fake_network_cache_model.new_vif() fixed_ips = vif.fixed_ips() @@ -296,6 +309,19 @@ class VIFTests(test.TestCase): self.assertEqual(vif['network'], fake_network_cache_model.new_network()) + def test_hydrate_vif_with_type(self): + vif_dict = dict( + id=1, + address='aa:aa:aa:aa:aa:aa', + network=fake_network_cache_model.new_network(), + type='bridge') + vif = model.VIF.hydrate(fake_network_cache_model.new_vif(vif_dict)) + self.assertEqual(vif['id'], 1) + self.assertEqual(vif['address'], 'aa:aa:aa:aa:aa:aa') + self.assertEqual(vif['type'], 'bridge') + self.assertEqual(vif['network'], + fake_network_cache_model.new_network()) + class NetworkInfoTests(test.TestCase): def test_create_model(self): |
