From 8715490223adf5bdb2c0d1c6d24390d105408775 Mon Sep 17 00:00:00 2001 From: Dimitri Savineau Date: Fri, 5 Apr 2019 15:04:45 -0400 Subject: [PATCH] ceph-facts: use last ipv6 address for mon/rgw 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 (cherry picked from commit fd4b0ec7eb4502eb246b84c1fefa213ae04df151) --- roles/ceph-facts/tasks/set_monitor_address.yml | 18 +++++++++++++++--- roles/ceph-facts/tasks/set_radosgw_address.yml | 13 +++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/roles/ceph-facts/tasks/set_monitor_address.yml b/roles/ceph-facts/tasks/set_monitor_address.yml index 7a891e041..09a08bd4d 100644 --- a/roles/ceph-facts/tasks/set_monitor_address.yml +++ b/roles/ceph-facts/tasks/set_monitor_address.yml @@ -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 diff --git a/roles/ceph-facts/tasks/set_radosgw_address.yml b/roles/ceph-facts/tasks/set_radosgw_address.yml index b0dcd0331..7e26cb77a 100644 --- a/roles/ceph-facts/tasks/set_radosgw_address.yml +++ b/roles/ceph-facts/tasks/set_radosgw_address.yml @@ -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: