diff options
| author | Nicolas Vollmar <nvollmar@gmail.com> | 2024-04-30 21:49:58 +0200 | 
|---|---|---|
| committer | Nicolas Vollmar <nvollmar@gmail.com> | 2024-04-30 22:31:11 +0200 | 
| commit | 0be0cdb932ca2d7399c026f1f601b56e179cc9c3 (patch) | |
| tree | 42640a6a6a7f549bc4e825512760e982fa5ec821 | |
| parent | b111c6c1bc552dba7fdb5373ea9108ba336daedf (diff) | |
| download | vyos-1x-0be0cdb932ca2d7399c026f1f601b56e179cc9c3.tar.gz vyos-1x-0be0cdb932ca2d7399c026f1f601b56e179cc9c3.zip | |
haproxy: T6179: fix rule generation
| -rw-r--r-- | data/templates/load-balancing/haproxy.cfg.j2 | 10 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_load-balancing_reverse-proxy.py | 5 | 
2 files changed, 12 insertions, 3 deletions
| diff --git a/data/templates/load-balancing/haproxy.cfg.j2 b/data/templates/load-balancing/haproxy.cfg.j2 index e8622ba7b..7917c8257 100644 --- a/data/templates/load-balancing/haproxy.cfg.j2 +++ b/data/templates/load-balancing/haproxy.cfg.j2 @@ -85,7 +85,7 @@ frontend {{ front }}  {%         if front_config.rule is vyos_defined %}  {%             for rule, rule_config in front_config.rule.items() %}      # rule {{ rule }} -{%                 if rule_config.domain_name is vyos_defined and rule_config.set.backend is vyos_defined %} +{%                 if rule_config.domain_name is vyos_defined %}  {%                     set rule_options = 'hdr(host)' %}  {%                     if rule_config.ssl is vyos_defined %}  {%                         set ssl_rule_translate = {'req-ssl-sni': 'req_ssl_sni', 'ssl-fc-sni': 'ssl_fc_sni', 'ssl-fc-sni-end': 'ssl_fc_sni_end'} %} @@ -94,16 +94,20 @@ frontend {{ front }}  {%                     for domain in rule_config.domain_name %}      acl {{ rule }} {{ rule_options }} -i {{ domain }}  {%                     endfor %} -    use_backend {{ rule_config.set.backend }} if {{ rule }}  {%                 endif %}  {# path url #} -{%                 if rule_config.url_path is vyos_defined and rule_config.set.redirect_location is vyos_defined %} +{%                 if rule_config.url_path is vyos_defined %}  {%                     set path_mod_translate = {'begin': '-i -m beg', 'end': '-i -m end', 'exact': ''} %}  {%                     for path, path_config in rule_config.url_path.items() %}  {%                         for url in path_config %}      acl {{ rule }} path {{ path_mod_translate[path] }} {{ url }}  {%                         endfor %}  {%                     endfor %} +{%                 endif %} +{%                 if rule_config.set.backend is vyos_defined %} +    use_backend {{ rule_config.set.backend }} if {{ rule }} +{%                 endif %} +{%                 if rule_config.set.redirect_location is vyos_defined %}      http-request redirect location {{ rule_config.set.redirect_location }} code 301 if {{ rule }}  {%                 endif %}  {# endpath #} diff --git a/smoketest/scripts/cli/test_load-balancing_reverse-proxy.py b/smoketest/scripts/cli/test_load-balancing_reverse-proxy.py index f9f163782..c8b17316f 100755 --- a/smoketest/scripts/cli/test_load-balancing_reverse-proxy.py +++ b/smoketest/scripts/cli/test_load-balancing_reverse-proxy.py @@ -180,6 +180,7 @@ class TestLoadBalancingReverseProxy(VyOSUnitTestSHIM.TestCase):          mode = 'http'          rule_ten = '10'          rule_twenty = '20' +        rule_thirty = '30'          send_proxy = 'send-proxy'          max_connections = '1000' @@ -192,6 +193,8 @@ class TestLoadBalancingReverseProxy(VyOSUnitTestSHIM.TestCase):          self.cli_set(base_path + ['service', frontend, 'rule', rule_ten, 'set', 'backend', bk_first_name])          self.cli_set(base_path + ['service', frontend, 'rule', rule_twenty, 'domain-name', domain_bk_second])          self.cli_set(base_path + ['service', frontend, 'rule', rule_twenty, 'set', 'backend', bk_second_name]) +        self.cli_set(base_path + ['service', frontend, 'rule', rule_thirty, 'url-path', 'end', '/test']) +        self.cli_set(base_path + ['service', frontend, 'rule', rule_thirty, 'set', 'backend', bk_second_name])          self.cli_set(back_base + [bk_first_name, 'mode', mode])          self.cli_set(back_base + [bk_first_name, 'server', bk_first_name, 'address', bk_server_first]) @@ -222,6 +225,8 @@ class TestLoadBalancingReverseProxy(VyOSUnitTestSHIM.TestCase):          self.assertIn(f'use_backend {bk_first_name} if {rule_ten}', config)          self.assertIn(f'acl {rule_twenty} hdr(host) -i {domain_bk_second}', config)          self.assertIn(f'use_backend {bk_second_name} if {rule_twenty}', config) +        self.assertIn(f'acl {rule_thirty} path -i -m end /test', config) +        self.assertIn(f'use_backend {bk_second_name} if {rule_thirty}', config)          # Backend          self.assertIn(f'backend {bk_first_name}', config) | 
