diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-10-29 12:21:21 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-10-29 12:21:21 +0000 |
commit | 04e9605580822aac6b165df64141019c3d2de48b (patch) | |
tree | 5e67202a7f09bf6c3574869be1ae172e78cab578 | |
parent | dd5728125f36b1f6e97893765905659184e66c0e (diff) | |
parent | e51d6474d44042459f485886ffcc14ed24b3967f (diff) | |
download | neutron-04e9605580822aac6b165df64141019c3d2de48b.tar.gz |
Merge "NSX: allow multiple networks with same vlan on different phy_net" into stable/juno
-rw-r--r-- | neutron/plugins/vmware/dbexts/db.py | 5 | ||||
-rw-r--r-- | neutron/plugins/vmware/plugins/base.py | 12 | ||||
-rw-r--r-- | neutron/tests/unit/vmware/extensions/test_providernet.py | 9 |
3 files changed, 22 insertions, 4 deletions
diff --git a/neutron/plugins/vmware/dbexts/db.py b/neutron/plugins/vmware/dbexts/db.py index 6326460046..37dd6a77f7 100644 --- a/neutron/plugins/vmware/dbexts/db.py +++ b/neutron/plugins/vmware/dbexts/db.py @@ -33,10 +33,11 @@ def get_network_bindings(session, network_id): all()) -def get_network_bindings_by_vlanid(session, vlan_id): +def get_network_bindings_by_vlanid_and_physical_net(session, vlan_id, + phy_uuid): session = session or db.get_session() return (session.query(models.TzNetworkBinding). - filter_by(vlan_id=vlan_id). + filter_by(vlan_id=vlan_id, phy_uuid=phy_uuid). all()) diff --git a/neutron/plugins/vmware/plugins/base.py b/neutron/plugins/vmware/plugins/base.py index 3797891771..773e8b818e 100644 --- a/neutron/plugins/vmware/plugins/base.py +++ b/neutron/plugins/vmware/plugins/base.py @@ -756,10 +756,15 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, for segment in segments: network_type = segment.get(pnet.NETWORK_TYPE) physical_network = segment.get(pnet.PHYSICAL_NETWORK) + physical_network_set = attr.is_attr_set(physical_network) segmentation_id = segment.get(pnet.SEGMENTATION_ID) network_type_set = attr.is_attr_set(network_type) segmentation_id_set = attr.is_attr_set(segmentation_id) + # If the physical_network_uuid isn't passed in use the default one. + if not physical_network_set: + physical_network = cfg.CONF.default_tz_uuid + err_msg = None if not network_type_set: err_msg = _("%s required") % pnet.NETWORK_TYPE @@ -782,8 +787,11 @@ class NsxPluginV2(addr_pair_db.AllowedAddressPairsMixin, 'max_id': constants.MAX_VLAN_TAG}) else: # Verify segment is not already allocated - bindings = nsx_db.get_network_bindings_by_vlanid( - context.session, segmentation_id) + bindings = ( + nsx_db.get_network_bindings_by_vlanid_and_physical_net( + context.session, segmentation_id, + physical_network) + ) if bindings: raise n_exc.VlanIdInUse( vlan_id=segmentation_id, diff --git a/neutron/tests/unit/vmware/extensions/test_providernet.py b/neutron/tests/unit/vmware/extensions/test_providernet.py index f6057f1451..6f27011b26 100644 --- a/neutron/tests/unit/vmware/extensions/test_providernet.py +++ b/neutron/tests/unit/vmware/extensions/test_providernet.py @@ -47,6 +47,15 @@ class TestProvidernet(test_nsx_plugin.NsxPluginV2TestCase): self.assertEqual(net['network'][pnet.SEGMENTATION_ID], 411) self.assertEqual(net['network'][pnet.PHYSICAL_NETWORK], 'physnet1') + # Test that we can create another provider network using the same + # vlan_id on another physical network. + data['network'][pnet.PHYSICAL_NETWORK] = 'physnet2' + network_req = self.new_create_request('networks', data, self.fmt) + net = self.deserialize(self.fmt, network_req.get_response(self.api)) + self.assertEqual(net['network'][pnet.NETWORK_TYPE], 'vlan') + self.assertEqual(net['network'][pnet.SEGMENTATION_ID], 411) + self.assertEqual(net['network'][pnet.PHYSICAL_NETWORK], 'physnet2') + class TestMultiProviderNetworks(test_nsx_plugin.NsxPluginV2TestCase): |