Merge "Add an option to enable port forwarding feature"
This commit is contained in:
commit
f67e22fa1b
|
@ -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
|
||||||
|
|
|
@ -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')
|
||||||
|
|
||||||
|
|
|
@ -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'),
|
||||||
|
|
|
@ -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):
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue