From b262fc9ad346aee6c1ac08bfd142451cd55571ea Mon Sep 17 00:00:00 2001 From: Carlos Goncalves Date: Sun, 2 Aug 2020 18:31:32 +0200 Subject: [PATCH] Add alpn_protocols to the listener data model Change-Id: Iea9fdbfaee7c7965adcc65825fe6422f87b06de0 --- octavia_lib/api/drivers/data_models.py | 4 +++- octavia_lib/common/constants.py | 6 ++++++ .../tests/unit/api/drivers/test_data_models.py | 11 +++++++++-- .../add-listener-alpn-protocols-ecb49db86b956c71.yaml | 7 +++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 releasenotes/notes/add-listener-alpn-protocols-ecb49db86b956c71.yaml diff --git a/octavia_lib/api/drivers/data_models.py b/octavia_lib/api/drivers/data_models.py index 928ae71..3d8774a 100644 --- a/octavia_lib/api/drivers/data_models.py +++ b/octavia_lib/api/drivers/data_models.py @@ -133,7 +133,8 @@ class Listener(BaseDataModel): client_ca_tls_container_data=Unset, client_authentication=Unset, client_crl_container_ref=Unset, client_crl_container_data=Unset, project_id=Unset, - allowed_cidrs=Unset, tls_versions=Unset, tls_ciphers=Unset): + allowed_cidrs=Unset, tls_versions=Unset, tls_ciphers=Unset, + alpn_protocols=Unset): self.admin_state_up = admin_state_up self.connection_limit = connection_limit @@ -164,6 +165,7 @@ class Listener(BaseDataModel): self.allowed_cidrs = allowed_cidrs self.tls_versions = tls_versions self.tls_ciphers = tls_ciphers + self.alpn_protocols = alpn_protocols class Pool(BaseDataModel): diff --git a/octavia_lib/common/constants.py b/octavia_lib/common/constants.py index eac3ff9..c70f029 100644 --- a/octavia_lib/common/constants.py +++ b/octavia_lib/common/constants.py @@ -147,6 +147,11 @@ LISTENER_SUPPORTED_PROTOCOLS = (PROTOCOL_TCP, PROTOCOL_HTTPS, PROTOCOL_HTTP, POOL_SUPPORTED_PROTOCOLS = (PROTOCOL_TCP, PROTOCOL_HTTP, PROTOCOL_HTTPS, PROTOCOL_PROXY, PROTOCOL_UDP, PROTOCOL_SCTP) + +ALPN_PROTOCOL_HTTP_1_0 = "http/1.0" +ALPN_PROTOCOL_HTTP_1_1 = "http/1.1" +ALPN_PROTOCOL_HTTP_2 = "h2" + PROVISIONING_STATUS = 'provisioning_status' # Amphora has been allocated to a load balancer AMPHORA_ALLOCATED = 'ALLOCATED' @@ -195,6 +200,7 @@ ADDITIONAL_VIPS = 'additional_vips' ADDRESS = 'address' ADMIN_STATE_UP = 'admin_state_up' ALLOWED_CIDRS = 'allowed_cidrs' +ALPN_PROTOCOLS = 'alpn_protocols' AVAILABILITY_ZONE = 'availability_zone' BACKUP = 'backup' CA_TLS_CONTAINER_DATA = 'ca_tls_container_data' diff --git a/octavia_lib/tests/unit/api/drivers/test_data_models.py b/octavia_lib/tests/unit/api/drivers/test_data_models.py index ca1953f..cdb1a7d 100644 --- a/octavia_lib/tests/unit/api/drivers/test_data_models.py +++ b/octavia_lib/tests/unit/api/drivers/test_data_models.py @@ -107,7 +107,10 @@ class TestProviderDataModels(base.TestCase): constants.TLS_VERSION_1_1, constants.TLS_VERSION_1_2, constants.TLS_VERSION_1_3], - tls_ciphers=None) + tls_ciphers=None, + alpn_protocols=[constants.ALPN_PROTOCOL_HTTP_1_0, + constants.ALPN_PROTOCOL_HTTP_1_1, + constants.ALPN_PROTOCOL_HTTP_2]) self.ref_lb = data_models.LoadBalancer( admin_state_up=False, @@ -253,7 +256,10 @@ class TestProviderDataModels(base.TestCase): constants.TLS_VERSION_1_1, constants.TLS_VERSION_1_2, constants.TLS_VERSION_1_3], - 'tls_ciphers': None} + 'tls_ciphers': None, + 'alpn_protocols': [constants.ALPN_PROTOCOL_HTTP_1_0, + constants.ALPN_PROTOCOL_HTTP_1_1, + constants.ALPN_PROTOCOL_HTTP_2]} self.ref_lb_dict_with_listener = { 'admin_state_up': False, @@ -367,6 +373,7 @@ class TestProviderDataModels(base.TestCase): ref_list_dict.pop('sni_container_data', None) ref_list_dict.pop('sni_container_refs', None) ref_list_dict.pop('tls_versions', None) + ref_list_dict.pop('alpn_protocols', None) ref_pool_dict = deepcopy(self.ref_pool_dict) ref_pool_dict['healthmonitor'] = None ref_pool_dict.pop('members', None) diff --git a/releasenotes/notes/add-listener-alpn-protocols-ecb49db86b956c71.yaml b/releasenotes/notes/add-listener-alpn-protocols-ecb49db86b956c71.yaml new file mode 100644 index 0000000..f1abffb --- /dev/null +++ b/releasenotes/notes/add-listener-alpn-protocols-ecb49db86b956c71.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Added parameter ``alpn_protocols`` to listeners. This parameter contains + the list of protocols supported by listeners, in descending order of + preference. The supported protocols are ``http/1.0``, ``http/1.1`` + and ``h2``.