]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph-rgw-loadbalancer: Fix keepalived master selection
authorBenoît Knecht <bknecht@protonmail.ch>
Mon, 1 Jun 2020 15:09:18 +0000 (17:09 +0200)
committerGuillaume Abrioux <gabrioux@redhat.com>
Wed, 5 May 2021 07:55:33 +0000 (09:55 +0200)
While 2ca33641 fixed a bug in the way the `keepalived.conf.j2` template matched
hostnames to set the VRRP `MASTER`/`BACKUP` states, it also introduced a
regression in the case where `virtual_ips` is a list of more than one IP
address.

The previous behavior would result in each host in the `rgwloadbalancers` group
to be `MASTER` for one of the `virtual_ips`, but the new behavior caused the
first host to be `MASTER` for all the IP address in `virtual_ips`.

This commit restores the original behavior.

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
(cherry picked from commit 3116f464226d676cae9603503c3f8a2d57bcf055)

roles/ceph-rgw-loadbalancer/tasks/pre_requisite.yml
roles/ceph-rgw-loadbalancer/templates/keepalived.conf.j2

index f878e760b66ef2f5ea69f5a17085efc69c8bd9ed..45903c22050a1aa9b7d921142d5cc0940713ce8a 100644 (file)
@@ -19,7 +19,7 @@
 
 - name: set_fact vip to vrrp_instance
   set_fact:
-    vrrp_instances: "{{ vrrp_instances | default([]) | union([{ 'name': 'VI_' + index|string , 'vip': item }]) }}"
+    vrrp_instances: "{{ vrrp_instances | default([]) | union([{ 'name': 'VI_' + index|string , 'vip': item, 'master': groups[rgwloadbalancer_group_name][index] }]) }}"
   loop: "{{ virtual_ips | flatten(levels=1) }}"
   loop_control:
     index_var: index
index 8beb0d44cd00fcba64286b1a6e9b1f5d88c58840..0c9378d3b163482c6e1e790872daad6bbbcb2a32 100644 (file)
@@ -15,8 +15,8 @@ vrrp_script check_haproxy {
 
 {% for instance in vrrp_instances %}
 vrrp_instance {{ instance['name'] }} {
-    state {{ 'MASTER' if inventory_hostname == groups[rgwloadbalancer_group_name][0] else 'BACKUP' }}
-    priority {{ '100' if inventory_hostname == groups[rgwloadbalancer_group_name][0] else '90' }}
+    state {{ 'MASTER' if inventory_hostname == instance['master'] else 'BACKUP' }}
+    priority {{ '100' if inventory_hostname == instance['master'] else '90' }}
     interface {{ virtual_ip_interface }}
     virtual_router_id {{ 50 + loop.index }}
     advert_int 1