From 65e132a734f005f090a384bfa129482d195c6d6e Mon Sep 17 00:00:00 2001 From: Gregory Thiemonge Date: Thu, 23 May 2019 14:20:02 +0200 Subject: [PATCH] Add support for monitor_{address,port} in UDP members UDP members didn't support monitor_address and monitor_port parameters. Setting those values didn't have any effects. This commit enables the support of both parameters. Story: 2005775 Task: 33492 Change-Id: Idaacfa60a1909d3f5e0f94371a405c8ce8ae9efa --- octavia/common/jinja/lvs/jinja_cfg.py | 4 +- octavia/common/jinja/lvs/templates/macros.j2 | 2 +- .../common/jinja/lvs/test_lvs_jinja_cfg.py | 56 +++++++++++++++++++ .../sample_configs/sample_configs_combined.py | 22 +++++++- .../sample_configs/sample_configs_split.py | 22 +++++++- ...-port-in-udp-members-ff83395544f228cf.yaml | 6 ++ 6 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 releasenotes/notes/fix-support-for-monitoring-address-and-port-in-udp-members-ff83395544f228cf.yaml diff --git a/octavia/common/jinja/lvs/jinja_cfg.py b/octavia/common/jinja/lvs/jinja_cfg.py index 627061dfbc..02a52d8d50 100644 --- a/octavia/common/jinja/lvs/jinja_cfg.py +++ b/octavia/common/jinja/lvs/jinja_cfg.py @@ -174,7 +174,9 @@ class LvsJinjaTemplater(object): 'address': member.ip_address, 'protocol_port': member.protocol_port, 'weight': member.weight, - 'enabled': member.enabled + 'enabled': member.enabled, + 'monitor_address': member.monitor_address, + 'monitor_port': member.monitor_port } def _get_default_lvs_check_script_path(self): diff --git a/octavia/common/jinja/lvs/templates/macros.j2 b/octavia/common/jinja/lvs/templates/macros.j2 index b6a365a9e7..cd13d756e5 100644 --- a/octavia/common/jinja/lvs/templates/macros.j2 +++ b/octavia/common/jinja/lvs/templates/macros.j2 @@ -19,7 +19,7 @@ lb_algo {{ pool.lb_algorithm }} {%- endmacro -%} {% macro misc_path_macro(member, health_monitor) -%} -misc_path "{{ health_monitor.check_script_path }} {{ member.address }} {{ member.protocol_port }}" +misc_path "{{ health_monitor.check_script_path }} {{ member.monitor_address|default(member.address, true) }} {{ member.monitor_port|default(member.protocol_port, true) }}" {%- endmacro %} {%- macro misc_check_macro(pool, member, health_monitor) -%} diff --git a/octavia/tests/unit/common/jinja/lvs/test_lvs_jinja_cfg.py b/octavia/tests/unit/common/jinja/lvs/test_lvs_jinja_cfg.py index 6e1d8185c9..c77102a9bf 100644 --- a/octavia/tests/unit/common/jinja/lvs/test_lvs_jinja_cfg.py +++ b/octavia/tests/unit/common/jinja/lvs/test_lvs_jinja_cfg.py @@ -179,6 +179,54 @@ class TestLvsCfg(base.TestCase): connection_limit=98)) self.assertEqual(exp, rendered_obj) + def test_render_template_udp_with_health_monitor_ip_port(self): + exp = ("# Configuration for Loadbalancer sample_loadbalancer_id_1\n" + "# Configuration for Listener sample_listener_id_1\n\n" + "net_namespace amphora-haproxy\n\n" + "virtual_server 10.0.0.2 80 {\n" + " lb_algo rr\n" + " lb_kind NAT\n" + " protocol UDP\n" + " delay_loop 30\n" + " delay_before_retry 31\n" + " retry 3\n\n\n" + " # Configuration for Pool sample_pool_id_1\n" + " # Configuration for HealthMonitor sample_monitor_id_1\n" + " # Configuration for Member sample_member_id_1\n" + " real_server 10.0.0.99 82 {\n" + " weight 13\n" + " uthreshold 98\n" + " delay_before_retry 31\n" + " retry 3\n" + " MISC_CHECK {\n" + " misc_path \"/var/lib/octavia/lvs/check/" + "udp_check.sh 192.168.1.1 9000\"\n" + " misc_timeout 30\n" + " }\n" + " }\n\n" + " # Configuration for Member sample_member_id_2\n" + " real_server 10.0.0.98 82 {\n" + " weight 13\n" + " uthreshold 98\n" + " delay_before_retry 31\n" + " retry 3\n" + " MISC_CHECK {\n" + " misc_path \"/var/lib/octavia/lvs/check/" + "udp_check.sh 192.168.1.1 9000\"\n" + " misc_timeout 30\n" + " }\n" + " }\n\n" + "}\n\n") + + rendered_obj = self.udp_jinja_cfg.render_loadbalancer_obj( + sample_configs_combined.sample_listener_tuple( + proto=constants.PROTOCOL_UDP, + monitor_ip_port=True, + monitor_proto=constants.HEALTH_MONITOR_UDP_CONNECT, + persistence=False, + connection_limit=98)) + self.assertEqual(exp, rendered_obj) + def test_render_template_udp_no_other_resources(self): exp = ("# Configuration for Loadbalancer sample_loadbalancer_id_1\n" "# Configuration for Listener sample_listener_id_1\n\n" @@ -216,6 +264,14 @@ class TestLvsCfg(base.TestCase): ret = self.udp_jinja_cfg._transform_member(in_member) self.assertEqual(sample_configs_combined.RET_UDP_MEMBER, ret) + in_member = sample_configs_combined.sample_member_tuple( + 'member_id_1', + '192.0.2.10', + monitor_ip_port=True) + ret = self.udp_jinja_cfg._transform_member(in_member) + self.assertEqual( + sample_configs_combined.RET_UDP_MEMBER_MONITOR_IP_PORT, ret) + def test_udp_transform_pool(self): in_pool = sample_configs_combined.sample_pool_tuple( proto=constants.PROTOCOL_UDP, diff --git a/octavia/tests/unit/common/sample_configs/sample_configs_combined.py b/octavia/tests/unit/common/sample_configs/sample_configs_combined.py index a4b5c442a1..504e5a18b1 100644 --- a/octavia/tests/unit/common/sample_configs/sample_configs_combined.py +++ b/octavia/tests/unit/common/sample_configs/sample_configs_combined.py @@ -430,7 +430,19 @@ RET_UDP_MEMBER = { 'address': '192.0.2.10', 'protocol_port': 82, 'weight': 13, - 'enabled': True + 'enabled': True, + 'monitor_address': None, + 'monitor_port': None +} + +RET_UDP_MEMBER_MONITOR_IP_PORT = { + 'id': 'member_id_1', + 'address': '192.0.2.10', + 'protocol_port': 82, + 'weight': 13, + 'enabled': True, + 'monitor_address': '192.168.1.1', + 'monitor_port': 9000 } UDP_MEMBER_1 = { @@ -438,7 +450,9 @@ UDP_MEMBER_1 = { 'address': '10.0.0.99', 'enabled': True, 'protocol_port': 82, - 'weight': 13 + 'weight': 13, + 'monitor_address': None, + 'monitor_port': None, } UDP_MEMBER_2 = { @@ -446,7 +460,9 @@ UDP_MEMBER_2 = { 'address': '10.0.0.98', 'enabled': True, 'protocol_port': 82, - 'weight': 13 + 'weight': 13, + 'monitor_address': None, + 'monitor_port': None } RET_UDP_POOL = { diff --git a/octavia/tests/unit/common/sample_configs/sample_configs_split.py b/octavia/tests/unit/common/sample_configs/sample_configs_split.py index 03374fd365..9d18e3ea9e 100644 --- a/octavia/tests/unit/common/sample_configs/sample_configs_split.py +++ b/octavia/tests/unit/common/sample_configs/sample_configs_split.py @@ -429,7 +429,19 @@ RET_UDP_MEMBER = { 'address': '192.0.2.10', 'protocol_port': 82, 'weight': 13, - 'enabled': True + 'enabled': True, + 'monitor_address': None, + 'monitor_port': None +} + +RET_UDP_MEMBER_MONITOR_IP_PORT = { + 'id': 'member_id_1', + 'address': '192.0.2.10', + 'protocol_port': 82, + 'weight': 13, + 'enabled': True, + 'monitor_address': '192.168.1.1', + 'monitor_port': 9000 } UDP_MEMBER_1 = { @@ -437,7 +449,9 @@ UDP_MEMBER_1 = { 'address': '10.0.0.99', 'enabled': True, 'protocol_port': 82, - 'weight': 13 + 'weight': 13, + 'monitor_address': None, + 'monitor_port': None } UDP_MEMBER_2 = { @@ -445,7 +459,9 @@ UDP_MEMBER_2 = { 'address': '10.0.0.98', 'enabled': True, 'protocol_port': 82, - 'weight': 13 + 'weight': 13, + 'monitor_address': None, + 'monitor_port': None } RET_UDP_POOL = { diff --git a/releasenotes/notes/fix-support-for-monitoring-address-and-port-in-udp-members-ff83395544f228cf.yaml b/releasenotes/notes/fix-support-for-monitoring-address-and-port-in-udp-members-ff83395544f228cf.yaml new file mode 100644 index 0000000000..5ab2672e86 --- /dev/null +++ b/releasenotes/notes/fix-support-for-monitoring-address-and-port-in-udp-members-ff83395544f228cf.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Add support for monitor_address and monitor_port attributes in UDP members. + Previously, monitor_address and monitor_port were ignored and address and + protocol_port attributes were used as monitoring address and port.