From 699c8b4e6ba85187290b95b5c54957c7c9fb5ff0 Mon Sep 17 00:00:00 2001 From: Anna Khmelnitsky Date: Wed, 27 Feb 2019 11:31:21 -0800 Subject: [PATCH] NSX|V3+P: Respect default keyword for physical_net When user (or heat stack) specifies 'default' in physical_net for vlan provider network, default vlan tz should be used. Change-Id: I7b9ef1b71bc98c341e7fa94469def1e0a83528a8 --- vmware_nsx/plugins/common_v3/plugin.py | 7 +++++-- .../tests/unit/extensions/test_providernet.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/vmware_nsx/plugins/common_v3/plugin.py b/vmware_nsx/plugins/common_v3/plugin.py index b6a5132385..1145a0c130 100644 --- a/vmware_nsx/plugins/common_v3/plugin.py +++ b/vmware_nsx/plugins/common_v3/plugin.py @@ -763,6 +763,9 @@ class NsxPluginV3Base(agentschedulers_db.AZDhcpAgentSchedulerDbMixin, net_data[pnet.SEGMENTATION_ID] = free_ids[0] return net_data[pnet.SEGMENTATION_ID] + def _default_physical_net(self, physical_net): + return physical_net is None or physical_net == 'default' + def _validate_provider_create(self, context, network_data, default_vlan_tz_uuid, default_overlay_tz_uuid, @@ -811,11 +814,11 @@ class NsxPluginV3Base(agentschedulers_db.AZDhcpAgentSchedulerDbMixin, if not transparent_vlan: # Set VLAN id to 0 for flat networks vlan_id = '0' - if physical_net is None: + if self._default_physical_net(physical_net): physical_net = default_vlan_tz_uuid elif net_type == utils.NsxV3NetworkTypes.VLAN: # Use default VLAN transport zone if physical network not given - if physical_net is None: + if self._default_physical_net(physical_net): physical_net = default_vlan_tz_uuid if not transparent_vlan: diff --git a/vmware_nsx/tests/unit/extensions/test_providernet.py b/vmware_nsx/tests/unit/extensions/test_providernet.py index edf641ff62..f2fe08dde7 100644 --- a/vmware_nsx/tests/unit/extensions/test_providernet.py +++ b/vmware_nsx/tests/unit/extensions/test_providernet.py @@ -25,6 +25,7 @@ from vmware_nsx.tests.unit.nsx_mh import test_plugin as test_nsx_plugin class TestProvidernet(test_nsx_plugin.NsxPluginV2TestCase): def test_create_delete_provider_network_default_physical_net(self): + '''Leaves physical_net unspecified''' data = {'network': {'name': 'net1', 'admin_state_up': True, 'tenant_id': 'admin', @@ -38,6 +39,22 @@ class TestProvidernet(test_nsx_plugin.NsxPluginV2TestCase): res = req.get_response(self.api) self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code) + def test_create_delete_provider_network_default_physical_net_2(self): + '''Uses the 'default' keyword as physical_net''' + data = {'network': {'name': 'net1', + 'admin_state_up': True, + 'tenant_id': 'admin', + pnet.NETWORK_TYPE: 'vlan', + pnet.SEGMENTATION_ID: 411, + pnet.PHYSICAL_NETWORK: 'default'}} + 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) + req = self.new_delete_request('networks', net['network']['id']) + res = req.get_response(self.api) + self.assertEqual(res.status_int, webob.exc.HTTPNoContent.code) + def test_create_provider_network(self): data = {'network': {'name': 'net1', 'admin_state_up': True,