From bc30b52650d031bd6f6fa273385d4c2bfa7119c6 Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Tue, 6 May 2014 14:00:26 -0700 Subject: [PATCH] NSX: ensure that no LSN is created on external networks Logical Service Nodes (LSN) are those that provide dhcp and metadata services to networks when the NSX plugin is used without the openstack dhcp and metadata proxy agents. External networks do not work with Neutron's dhcp and metadata services, therefore there is no need to provision a LSN in this case. Added UT to avoid regression. Closes-bug: #1316795 Change-Id: I3dab0c9cbecdd9296466c991d02d590d6bd5bd49 (cherry picked from commit af020da544ac4cf21b293d23710545ee5cdcdfa4) --- neutron/plugins/vmware/dhcp_meta/nsx.py | 3 +++ neutron/tests/unit/vmware/test_dhcpmeta.py | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/neutron/plugins/vmware/dhcp_meta/nsx.py b/neutron/plugins/vmware/dhcp_meta/nsx.py index 6fbb350627a..5c1f3971aff 100644 --- a/neutron/plugins/vmware/dhcp_meta/nsx.py +++ b/neutron/plugins/vmware/dhcp_meta/nsx.py @@ -207,6 +207,9 @@ def handle_network_dhcp_access(plugin, context, network, action): % {"action": action, "resource": network}) if action == 'create_network': network_id = network['id'] + if network.get(external_net.EXTERNAL): + LOG.info(_("Network %s is external: no LSN to create"), network_id) + return plugin.lsn_manager.lsn_create(context, network_id) elif action == 'delete_network': # NOTE(armando-migliaccio): on delete_network, network diff --git a/neutron/tests/unit/vmware/test_dhcpmeta.py b/neutron/tests/unit/vmware/test_dhcpmeta.py index 8005da942d7..f3e5ea690c9 100644 --- a/neutron/tests/unit/vmware/test_dhcpmeta.py +++ b/neutron/tests/unit/vmware/test_dhcpmeta.py @@ -1143,6 +1143,12 @@ class DhcpTestCase(base.BaseTestCase): self.plugin.lsn_manager.lsn_create.assert_called_once_with( mock.ANY, network['id']) + def test_handle_create_network_router_external(self): + network = {'id': 'foo_network_id', 'router:external': True} + nsx.handle_network_dhcp_access( + self.plugin, mock.ANY, network, 'create_network') + self.assertFalse(self.plugin.lsn_manager.lsn_create.call_count) + def test_handle_delete_network(self): network_id = 'foo_network_id' self.plugin.lsn_manager.lsn_delete_by_network.return_value = (