diff --git a/hooks/neutron_api_context.py b/hooks/neutron_api_context.py index 6f56f629..fe8b1a0c 100644 --- a/hooks/neutron_api_context.py +++ b/hooks/neutron_api_context.py @@ -416,7 +416,19 @@ class NeutronCCContext(context.NeutronContext): last_available = r - return plugin_defs[last_available] + plugins = plugin_defs[last_available] + + if not config('enable-fwaas'): + filtered = [] + for plugin in plugins: + if plugin == 'firewall' or plugin == 'firewall_v2': + continue + + filtered.append(plugin) + + plugins = filtered + + return plugins def __call__(self): from neutron_api_utils import api_port @@ -647,8 +659,9 @@ class NeutronCCContext(context.NeutronContext): # TODO(fnordahl): Remove fall-back in next charm release service_plugins[release].append('lbaasv2') - if cmp_release >= 'stein' and cmp_release <= 'ussuri': - ctxt['firewall_v2'] = True + if config("enable-fwaas"): + if cmp_release >= 'stein' and cmp_release <= 'ussuri': + ctxt['firewall_v2'] = True ctxt['service_plugins'] = self.get_service_plugins( cmp_release, service_plugins) diff --git a/unit_tests/test_neutron_api_context.py b/unit_tests/test_neutron_api_context.py index fe451b11..9f18861c 100644 --- a/unit_tests/test_neutron_api_context.py +++ b/unit_tests/test_neutron_api_context.py @@ -434,15 +434,15 @@ class NeutronCCContextTest(CharmTestCase): super(NeutronCCContextTest, self).tearDown() def test_get_service_plugins(self): - plugs = {"mitaka": "A", - "queens": "B", - "ussuri": "C"} + plugs = {"mitaka": ["A"], + "queens": ["B"], + "ussuri": ["C"]} p = context.NeutronCCContext().get_service_plugins('train', plugs) - self.assertEquals(p, "B") + self.assertEquals(p, ["B"]) p = context.NeutronCCContext().get_service_plugins('ussuri', plugs) - self.assertEquals(p, "C") + self.assertEquals(p, ["C"]) p = context.NeutronCCContext().get_service_plugins('wallaby', plugs) - self.assertEquals(p, "C") + self.assertEquals(p, ["C"]) @patch.object(context, 'NeutronLoadBalancerContext') @patch.object(context.NeutronCCContext, 'network_manager') @@ -709,6 +709,69 @@ class NeutronCCContextTest(CharmTestCase): with patch.object(napi_ctxt, '_ensure_packages'): self.assertEqual(ctxt_data, napi_ctxt()) + @patch.object(context, 'NeutronLoadBalancerContext') + @patch.object(context.NeutronCCContext, 'network_manager') + @patch.object(context.NeutronCCContext, 'plugin') + @patch('builtins.__import__') + def test_neutroncc_context_no_fwaas(self, _import, plugin, nm, nlb): + plugin.return_value = None + self.test_config.set('enable-l3ha', True) + self.test_config.set('enable-fwaas', False) + self.test_config.set('enable-qos', False) + self.test_config.set('enable-vlan-trunking', False) + self.test_config.set('overlay-network-type', 'gre') + self.test_config.set('neutron-plugin', 'ovs') + self.test_config.set('l2-population', False) + self.os_release.return_value = 'ussuri' + self.maxDiff = None + ctxt_data = { + 'debug': True, + 'enable_dvr': False, + 'l3_ha': True, + 'mechanism_drivers': 'openvswitch,hyperv', + 'external_network': 'bob', + 'global_physnet_mtu': 1500, + 'enable_igmp_snooping': True, + 'neutron_bind_port': self.api_port, + 'verbose': True, + 'l2_population': False, + 'overlay_network_type': 'gre', + 'path_mtu': 1500, + 'tenant_network_types': 'gre,vlan,flat,local', + 'max_l3_agents_per_router': 2, + 'min_l3_agents_per_router': 2, + 'network_scheduler_driver': ('neutron.scheduler.' + 'dhcp_agent_scheduler.' + 'AZAwareWeightScheduler'), + 'allow_automatic_dhcp_failover': True, + 'allow_automatic_l3agent_failover': False, + 'dhcp_agents_per_network': 3, + 'dhcp_load_type': 'networks', + 'enable_sriov': False, + 'quota_floatingip': 50, + 'quota_health_monitors': -1, + 'quota_member': -1, + 'quota_network': 10, + 'quota_pool': 10, + 'quota_port': 50, + 'quota_router': 10, + 'quota_security_group': 10, + 'quota_security_group_rule': 100, + 'quota_subnet': 10, + 'quota_vip': 10, + 'vlan_ranges': 'physnet1:1000:2000', + 'vni_ranges': '1001:2000', + 'extension_drivers': 'port_security', + 'router_scheduler_driver': ('neutron.scheduler.l3_agent_scheduler.' + 'AZLeastRoutersScheduler'), + 'service_plugins': ('router,metering,segments,' + 'neutron_dynamic_routing.services.bgp.' + 'bgp_plugin.BgpPlugin'), + } + napi_ctxt = context.NeutronCCContext() + with patch.object(napi_ctxt, '_ensure_packages'): + self.assertEqual(ctxt_data, napi_ctxt()) + @patch.object(context.NeutronCCContext, 'network_manager') @patch.object(context.NeutronCCContext, 'plugin') @patch('builtins.__import__')