Merge "Add an option to enable port forwarding feature"

This commit is contained in:
Zuul 2019-10-08 20:29:40 +00:00 committed by Gerrit Code Review
commit f67e22fa1b
5 changed files with 102 additions and 0 deletions

View File

@ -30,6 +30,11 @@ options:
WARNING: Enabling this may affect your disk I/O performance since this WARNING: Enabling this may affect your disk I/O performance since this
may log ALL traffic being passed via gateway. Logging configuration may log ALL traffic being passed via gateway. Logging configuration
such as thresholds and a destination log file are available in the neutron-gateway charm. such as thresholds and a destination log file are available in the neutron-gateway charm.
enable-port-forwarding:
type: boolean
default: False
description: |
Setting this to True will enable port forwarding (Rocky and later).
openstack-origin: openstack-origin:
type: string type: string
default: distro default: distro

View File

@ -261,6 +261,27 @@ def is_nfg_logging_enabled():
return False return False
def is_port_forwarding_enabled():
"""
Check if Neutron port forwarding featur should be enabled.
returns: True if enable-port-forwarding config item is True,
otherwise False.
:rtype: boolean
"""
if config('enable-port-forwarding'):
if CompareOpenStackReleases(os_release('neutron-server')) < 'rocky':
log("The port forwarding option is"
"only supported on Rocky or later",
ERROR)
return False
return True
return False
def is_vlan_trunking_requested_and_valid(): def is_vlan_trunking_requested_and_valid():
"""Check whether VLAN trunking should be enabled by checking whether """Check whether VLAN trunking should be enabled by checking whether
it has been requested and, if it has, is it supported in the current it has been requested and, if it has, is it supported in the current
@ -607,6 +628,9 @@ class NeutronCCContext(context.NeutronContext):
if is_nsg_logging_enabled() or is_nfg_logging_enabled(): if is_nsg_logging_enabled() or is_nfg_logging_enabled():
ctxt['service_plugins'].append('log') ctxt['service_plugins'].append('log')
if is_port_forwarding_enabled():
ctxt['service_plugins'].append('port_forwarding')
if is_qos_requested_and_valid(): if is_qos_requested_and_valid():
ctxt['service_plugins'].append('qos') ctxt['service_plugins'].append('qos')

View File

@ -108,6 +108,7 @@ from neutron_api_context import (
is_nfg_logging_enabled, is_nfg_logging_enabled,
is_nsg_logging_enabled, is_nsg_logging_enabled,
is_qos_requested_and_valid, is_qos_requested_and_valid,
is_port_forwarding_enabled,
is_vlan_trunking_requested_and_valid, is_vlan_trunking_requested_and_valid,
) )
@ -542,6 +543,7 @@ def neutron_plugin_api_relation_joined(rid=None):
'enable-vlan-trunking': is_vlan_trunking_requested_and_valid(), 'enable-vlan-trunking': is_vlan_trunking_requested_and_valid(),
'enable-nsg-logging': is_nsg_logging_enabled(), 'enable-nsg-logging': is_nsg_logging_enabled(),
'enable-nfg-logging': is_nfg_logging_enabled(), 'enable-nfg-logging': is_nfg_logging_enabled(),
'enable-port-forwarding': is_port_forwarding_enabled(),
'overlay-network-type': get_overlay_network_type(), 'overlay-network-type': get_overlay_network_type(),
'addr': unit_get('private-address'), 'addr': unit_get('private-address'),
'polling-interval': config('polling-interval'), 'polling-interval': config('polling-interval'),

View File

@ -261,6 +261,17 @@ class GeneralTests(CharmTestCase):
self.test_config.set('enable-firewall-group-logging', True) self.test_config.set('enable-firewall-group-logging', True)
self.assertFalse(context.is_nfg_logging_enabled()) self.assertFalse(context.is_nfg_logging_enabled())
def test_is_port_forwarding_enabled(self):
self.os_release.return_value = 'rocky'
self.test_config.set('enable-port-forwarding', True)
self.assertTrue(context.is_port_forwarding_enabled())
self.os_release.return_value = 'rocky'
self.test_config.set('enable-port-forwarding', False)
self.assertFalse(context.is_port_forwarding_enabled())
self.os_release.return_value = 'queens'
self.test_config.set('enable-port-forwarding', True)
self.assertFalse(context.is_port_forwarding_enabled())
class IdentityServiceContext(CharmTestCase): class IdentityServiceContext(CharmTestCase):

View File

@ -90,6 +90,7 @@ TO_PATCH = [
'generate_ha_relation_data', 'generate_ha_relation_data',
'is_nsg_logging_enabled', 'is_nsg_logging_enabled',
'is_nfg_logging_enabled', 'is_nfg_logging_enabled',
'is_port_forwarding_enabled',
'remove_old_packages', 'remove_old_packages',
'services', 'services',
'service_restart', 'service_restart',
@ -141,6 +142,7 @@ class NeutronAPIHooksTests(CharmTestCase):
self.neutron_plugin_attribute.side_effect = _mock_nuage_npa self.neutron_plugin_attribute.side_effect = _mock_nuage_npa
self.is_nsg_logging_enabled.return_value = False self.is_nsg_logging_enabled.return_value = False
self.is_nfg_logging_enabled.return_value = False self.is_nfg_logging_enabled.return_value = False
self.is_port_forwarding_enabled.return_value = False
def _fake_relids(self, rel_name): def _fake_relids(self, rel_name):
return [randrange(100) for _count in range(2)] return [randrange(100) for _count in range(2)]
@ -531,6 +533,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -576,6 +579,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': True, 'enable-nsg-logging': True,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -627,6 +631,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': True, 'enable-nfg-logging': True,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -648,6 +653,57 @@ class NeutronAPIHooksTests(CharmTestCase):
relation_id=None, relation_id=None,
**_relation_data) **_relation_data)
def test_neutron_plugin_api_relation_joined_port_forwarding(self):
self.unit_get.return_value = '172.18.18.18'
self.IdentityServiceContext.return_value = \
DummyContext(return_value={})
_relation_data = {
'neutron-security-groups': False,
'enable-dvr': False,
'enable-l3ha': False,
'enable-qos': False,
'enable-vlan-trunking': False,
'addr': '172.18.18.18',
'polling-interval': 2,
'rpc-response-timeout': 60,
'report-interval': 30,
'l2-population': False,
'overlay-network-type': 'vxlan',
'service_protocol': None,
'auth_protocol': None,
'service_tenant': None,
'service_port': None,
'region': 'RegionOne',
'service_password': None,
'auth_port': None,
'auth_host': None,
'service_username': None,
'service_host': None,
'neutron-api-ready': 'no',
'enable-nsg-logging': False,
'enable-nfg-logging': False,
'enable-port-forwarding': True,
'global-physnet-mtu': 1500,
'physical-network-mtus': None,
}
self.is_qos_requested_and_valid.return_value = False
self.is_vlan_trunking_requested_and_valid.return_value = False
self.get_dvr.return_value = False
self.get_l3ha.return_value = False
self.get_l2population.return_value = False
self.get_overlay_network_type.return_value = 'vxlan'
self.get_dns_domain.return_value = ''
self.test_config.set('enable-port-forwarding', True)
self.is_port_forwarding_enabled.return_value = True
self._call_hook('neutron-plugin-api-relation-joined')
self.relation_set.assert_called_with(
relation_id=None,
**_relation_data)
def test_neutron_plugin_api_relation_joined_dvr(self): def test_neutron_plugin_api_relation_joined_dvr(self):
self.unit_get.return_value = '172.18.18.18' self.unit_get.return_value = '172.18.18.18'
self.IdentityServiceContext.return_value = \ self.IdentityServiceContext.return_value = \
@ -677,6 +733,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -722,6 +779,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -769,6 +827,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'neutron-api-ready': 'no', 'neutron-api-ready': 'no',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }
@ -815,6 +874,7 @@ class NeutronAPIHooksTests(CharmTestCase):
'dns-domain': 'openstack.example.', 'dns-domain': 'openstack.example.',
'enable-nsg-logging': False, 'enable-nsg-logging': False,
'enable-nfg-logging': False, 'enable-nfg-logging': False,
'enable-port-forwarding': False,
'global-physnet-mtu': 1500, 'global-physnet-mtu': 1500,
'physical-network-mtus': None, 'physical-network-mtus': None,
} }