From 2feb53d35c2de91765d6a07a7ba9f9a5b8a13578 Mon Sep 17 00:00:00 2001 From: abikouo Date: Tue, 28 Nov 2023 19:43:11 +0100 Subject: [PATCH] multiple fixes --- plugins/module_utils/elbv2.py | 19 ++++++++++++++++--- tests/unit/module_utils/test_elbv2.py | 9 +++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/plugins/module_utils/elbv2.py b/plugins/module_utils/elbv2.py index 1911b0943f3..4754a4fb7a3 100644 --- a/plugins/module_utils/elbv2.py +++ b/plugins/module_utils/elbv2.py @@ -769,6 +769,9 @@ def __init__(self, connection, module, elb_arn): dict((x, listener_dict[x]) for x in listener_dict if listener_dict[x] is not None) for listener_dict in listeners ] + # AlpnPolicy is set as str into input but API is expected a list + # Transform a single item into a list of one element + listeners = self._ensure_listeners_alpn_policy(listeners) self.listeners = self._ensure_listeners_default_action_has_arn(listeners) self.current_listeners = self._get_elb_listeners() self.purge_listeners = module.params.get("purge_listeners") @@ -799,6 +802,16 @@ def _get_elb_listeners(self): except (BotoCoreError, ClientError) as e: self.module.fail_json_aws(e) + @staticmethod + def _ensure_listeners_alpn_policy(listeners): + result = [] + for l in listeners: + update_listener = deepcopy(l) + if "AlpnPolicy" in l: + update_listener["AlpnPolicy"] = [update_listener["AlpnPolicy"]] + result.append(update_listener) + return result + def _ensure_listeners_default_action_has_arn(self, listeners): """ If a listener DefaultAction has been passed with a Target Group Name instead of ARN, lookup the ARN and @@ -920,10 +933,10 @@ def _compare_listener(current_listener, new_listener): if new_alpn_policy: if current_listener["Protocol"] == "TLS" and new_listener["Protocol"] == "TLS": current_alpn_policy = current_listener.get("AlpnPolicy") - if not current_alpn_policy or current_alpn_policy != new_alpn_policy: - modified_listener["AlpnPolicy"] = [new_alpn_policy] + if not current_alpn_policy or current_alpn_policy[0] != new_alpn_policy[0]: + modified_listener["AlpnPolicy"] = new_alpn_policy elif current_listener["Protocol"] != "TLS" and new_listener["Protocol"] == "TLS": - modified_listener["AlpnPolicy"] = [new_alpn_policy] + modified_listener["AlpnPolicy"] = new_alpn_policy if modified_listener: return modified_listener diff --git a/tests/unit/module_utils/test_elbv2.py b/tests/unit/module_utils/test_elbv2.py index 4177015963c..a380669c01a 100644 --- a/tests/unit/module_utils/test_elbv2.py +++ b/tests/unit/module_utils/test_elbv2.py @@ -191,8 +191,8 @@ def createListener(self, **kwargs): ], ) def test__compare_listener_alpn_policy(self, current_protocol, current_alpn, new_alpn): - current_listener = self.createListener(protocol=current_protocol, alpnPolicy=current_alpn) - new_listener = self.createListener(protocol="TLS", alpnPolicy=new_alpn) + current_listener = self.createListener(protocol=current_protocol, alpnPolicy=[current_alpn]) + new_listener = self.createListener(protocol="TLS", alpnPolicy=[new_alpn]) result = None if current_protocol != "TLS": result = {"Protocol": "TLS"} @@ -286,3 +286,8 @@ def test__compare_listener_port(self, are_equals): if not are_equals: expected = {"Port": new_port} assert result == expected + + def test_ensure_listeners_alpn_policy(self): + listeners = [{"Port": self.DEFAULT_PORT, "AlpnPolicy": "HTTP2Optional"}] + expected = [{"Port": self.DEFAULT_PORT, "AlpnPolicy": ["HTTP2Optional"]}] + assert expected == elbv2.ELBListeners._ensure_listeners_alpn_policy(listeners)