]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph-facts: use last ipv6 address for mon/rgw
authorDimitri Savineau <dsavinea@redhat.com>
Fri, 5 Apr 2019 19:04:45 +0000 (15:04 -0400)
committerDimitri Savineau <savineau.dimitri@gmail.com>
Tue, 9 Apr 2019 14:48:14 +0000 (10:48 -0400)
When using monitor_address_block or radosgw_address_block variables
to configure the mon/rgw address we're getting the first ip address
from the ansible facts present in that cidr.
When there's VIP on that network the first filter could return the
wrong value.
This seems to affect only IPv6 setup because the VIP addresses are
added to the ansible facts at the beginning of the list. This is the
opposite (at the end) when using IPv4.
This causes the mon/rgw processes to bind on the VIP address.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1680155
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
(cherry picked from commit fd4b0ec7eb4502eb246b84c1fefa213ae04df151)

roles/ceph-facts/tasks/set_monitor_address.yml
roles/ceph-facts/tasks/set_radosgw_address.yml

index 7a891e04146aa9adb49842d36492d750261739d4..09a08bd4dc366595a3b19cda0431b289319c26c1 100644 (file)
@@ -1,13 +1,25 @@
 ---
-- name: set_fact _monitor_address to monitor_address_block
+- name: set_fact _monitor_address to monitor_address_block ipv4
   set_fact:
-    _monitor_addresses: "{{ _monitor_addresses | default([]) + [{ 'name': item, 'addr': hostvars[item]['ansible_all_' + ip_version + '_addresses'] | ipaddr(hostvars[item]['monitor_address_block']) | first | ipwrap }] }}"
+    _monitor_addresses: "{{ _monitor_addresses | default([]) + [{ 'name': item, 'addr': hostvars[item]['ansible_all_ipv4_addresses'] | ipaddr(hostvars[item]['monitor_address_block']) | first }] }}"
   with_items:
     - "{{ groups.get(mon_group_name, []) }}"
   when:
     - "item not in _monitor_addresses | default([]) | selectattr('name', 'defined') |  map(attribute='name') | list"
     - hostvars[item]['monitor_address_block'] is defined
     - hostvars[item]['monitor_address_block'] != 'subnet'
+    - ip_version == 'ipv4'
+
+- name: set_fact _monitor_address to monitor_address_block ipv6
+  set_fact:
+    _monitor_addresses: "{{ _monitor_addresses | default([]) + [{ 'name': item, 'addr': hostvars[item]['ansible_all_ipv6_addresses'] | ipaddr(hostvars[item]['monitor_address_block']) | last | ipwrap }] }}"
+  with_items:
+    - "{{ groups.get(mon_group_name, []) }}"
+  when:
+    - "item not in _monitor_addresses | default([]) | selectattr('name', 'defined') |  map(attribute='name') | list"
+    - hostvars[item]['monitor_address_block'] is defined
+    - hostvars[item]['monitor_address_block'] != 'subnet'
+    - ip_version == 'ipv6'
 
 - name: set_fact _monitor_address to monitor_address
   set_fact:
@@ -47,4 +59,4 @@
   set_fact:
     _current_monitor_address: "{{ item.addr }}"
   with_items: "{{ _monitor_addresses }}"
-  when: inventory_hostname == item.name
\ No newline at end of file
+  when: inventory_hostname == item.name
index b0dcd03316b82fbf0e1332589ee9886c4a6fc6b5..7e26cb77a1f86dd04b8481e39d852dd6868d2f56 100644 (file)
@@ -1,10 +1,19 @@
 ---
-- name: set_fact _radosgw_address to radosgw_address_block
+- name: set_fact _radosgw_address to radosgw_address_block ipv4
   set_fact:
-    _radosgw_address: "{{ hostvars[inventory_hostname]['ansible_all_' + ip_version + '_addresses'] | ipaddr(radosgw_address_block) | first | ipwrap }}"
+    _radosgw_address: "{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'] | ipaddr(radosgw_address_block) | first }}"
   when:
     - radosgw_address_block is defined
     - radosgw_address_block != 'subnet'
+    - ip_version == 'ipv4'
+
+- name: set_fact _radosgw_address to radosgw_address_block ipv6
+  set_fact:
+    _radosgw_address: "{{ hostvars[inventory_hostname]['ansible_all_ipv6_addresses'] | ipaddr(radosgw_address_block) | last | ipwrap }}"
+  when:
+    - radosgw_address_block is defined
+    - radosgw_address_block != 'subnet'
+    - ip_version == 'ipv6'
 
 - name: set_fact _radosgw_address to radosgw_address
   set_fact: