Drop Octavia providers supported protocols list

Currently, Kuryr LBaaS driver maintains a list of
supported protocols per Octavia provider.
This list is used for optimizing listener creation
flow (don't send a request to Octavia if the provider
doesn't support this protocol).

Since this list is actually an Octavia attribute, it will
be more robust to delete this list from Kuryr and handle
the corresponding exception in case specific protocol
is not supported by Octavia provider.

Change-Id: I94d6de873fc4d3bfafdfd591a15ba82fb4e38ec3
Closes-Bug: 1809049
This commit is contained in:
Yossi Boaron 2018-12-19 00:43:56 +02:00
parent a874777e9e
commit 8df6cbf831
2 changed files with 3 additions and 50 deletions

View File

@ -36,12 +36,6 @@ CONF = cfg.CONF
LOG = logging.getLogger(__name__)
_ACTIVATION_TIMEOUT = CONF.neutron_defaults.lbaas_activation_timeout
_PROVIDER_SUPPORTED_LISTENER_PROT = {
'amphora': ['HTTP', 'HTTPS', 'TCP', 'UDP'],
'ovn': ['TCP', 'UDP'],
'haproxy': ['HTTP', 'HTTPS', 'TCP']}
_L7_POLICY_ACT_REDIRECT_TO_POOL = 'REDIRECT_TO_POOL'
# NOTE(yboaron):Prior to sending create request to Octavia, LBaaS driver
# verifies that LB is in a stable state by polling LB's provisioning_status
@ -259,25 +253,6 @@ class LBaaSv2Driver(base.LBaaSDriver):
def ensure_listener(self, loadbalancer, protocol, port,
service_type='ClusterIP'):
# NOTE(yboaron): Since retrieving Octavia capabilities/version is not
# supported via the OpenstackSdk, the list of allowed listener's
# protocols will be defined statically.
# Kuryr still need to handle the case in which listener's protocol
# (e.g: UDP) is not supported by Octavia.
provider = loadbalancer.provider or 'amphora'
try:
if protocol not in _PROVIDER_SUPPORTED_LISTENER_PROT[provider]:
LOG.info("Protocol: %(prot)s: is not supported by "
"%(provider)s",
{'prot': protocol, 'provider': provider})
return None
except KeyError:
LOG.info("Provider %(provider)s doesnt exist in "
"_PROVIDER_SUPPORTED_LISTENER_PROT",
{'provider': provider})
return None
name = "%s:%s:%s" % (loadbalancer.name, protocol, port)
listener = obj_lbaas.LBaaSListener(name=name,
project_id=loadbalancer.project_id,

View File

@ -98,25 +98,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
lbaas.lbaas_loadbalancer_path % loadbalancer.id,
params={'cascade': True})
def test_ensure_listener_tcp(self):
self._test_ensure_listener('TCP')
def test_ensure_listener_udp(self):
self._test_ensure_listener('UDP')
def test_ensure_listener_unsupported_protocol(self):
self._test_ensure_listener('NOT_SUPPORTED')
def test_ensure_listener_ovn_tcp(self):
self._test_ensure_listener('TCP', 'ovn')
def test_ensure_listener_ovn_udp(self):
self._test_ensure_listener('UDP', 'ovn')
def test_ensure_listener_ovn_unsupported_protocol(self):
self._test_ensure_listener('HTTP', 'ovn')
def _test_ensure_listener(self, protocol, provider=None):
def _test_ensure_listener(self):
cls = d_lbaasv2.LBaaSv2Driver
m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
expected_resp = mock.sentinel.expected_resp
@ -125,6 +107,8 @@ class TestLBaaSv2Driver(test_base.TestCase):
subnet_id = 'D3FA400A-F543-4B91-9CD3-047AF0CE42D1'
ip = '1.2.3.4'
loadbalancer_id = '00EE9E11-91C2-41CF-8FD4-7970579E5C4C'
protocol = 'TCP'
provider = 'amphora'
port = 1234
loadbalancer = obj_lbaas.LBaaSLoadBalancer(
id=loadbalancer_id, name=name, project_id=project_id,
@ -135,12 +119,6 @@ class TestLBaaSv2Driver(test_base.TestCase):
resp = cls.ensure_listener(m_driver, loadbalancer,
protocol, port)
provider = loadbalancer.provider or 'amphora'
if (protocol not in
d_lbaasv2._PROVIDER_SUPPORTED_LISTENER_PROT[provider]):
self.assertIsNone(resp)
return
m_driver._ensure_provisioned.assert_called_once_with(
loadbalancer, mock.ANY, m_driver._create_listener,
m_driver._find_listener, d_lbaasv2._LB_STS_POLL_SLOW_INTERVAL)