From af020da544ac4cf21b293d23710545ee5cdcdfa4 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 --- 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 6fbb35062..5c1f3971a 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 a2a43347a..ca5667274 100644 --- a/neutron/tests/unit/vmware/test_dhcpmeta.py +++ b/neutron/tests/unit/vmware/test_dhcpmeta.py @@ -1142,6 +1142,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 = (