inventory_hostname in groups.get(iscsi_gw_group_name, [])
-- name: store existing rbd mirror peers in monitor config store
- hosts: "{{ rbdmirror_group_name|default('rbdmirrors') }}"
- become: true
- any_errors_fatal: true
- gather_facts: true
- tasks:
- - name: store existing rbd mirror peers in monitor config store
- when: ceph_rbd_mirror_configure | default(False) | bool
- block:
- - name: import ceph-defaults
- import_role:
- name: ceph-defaults
-
- - name: import ceph-validate
- import_role:
- name: ceph-validate
- tasks_from: check_rbdmirror.yml
-
- - name: import container_binary
- import_role:
- name: ceph-facts
- tasks_from: container_binary.yml
-
- - name: set_fact rbd_cmd
- set_fact:
- rbd_cmd: "{{ container_binary + ' run --rm --net=host -v /etc/ceph:/etc/ceph:z -v /var/lib/ceph:/var/lib/ceph:z -v /var/run/ceph:/var/run/ceph:z --entrypoint=rbd ' + ceph_docker_registry + '/' + ceph_docker_image + ':' + ceph_docker_image_tag if containerized_deployment | bool else 'ceph' }} --cluster {{ cluster }} -n client.rbd-mirror.{{ ansible_facts['hostname'] }} -k /etc/ceph/{{ cluster }}.client.rbd-mirror.{{ ansible_facts['hostname'] }}.keyring"
-
- - name: set_fact admin_rbd_cmd
- set_fact:
- admin_rbd_cmd: "{{ container_binary + ' run --rm --net=host -v /etc/ceph:/etc/ceph:z -v /var/lib/ceph:/var/lib/ceph:z -v /var/run/ceph:/var/run/ceph:z --entrypoint=rbd ' + ceph_docker_registry + '/' + ceph_docker_image + ':' + ceph_docker_image_tag if containerized_deployment | bool else 'ceph' }} --cluster {{ cluster }}"
- - name: get mirror pool info
- command: "{{ rbd_cmd }} mirror pool info {{ ceph_rbd_mirror_pool }} --format json"
- register: mirror_pool_info
- changed_when: false
-
- - name: set_fact mirror_peer_found
- set_fact:
- mirror_peer_uuid: "{{ ((mirror_pool_info.stdout | from_json | default('{}'))['peers'] | selectattr('site_name', 'match', '^'+ceph_rbd_mirror_remote_cluster+'$') | map(attribute='uuid') | list) }}"
-
- - name: remove current rbd mirror peer, add new peer into mon config store
- when: mirror_peer_uuid | length > 0
- block:
- - name: get remote user keyring
- slurp:
- src: "/etc/ceph/{{ ceph_rbd_mirror_remote_cluster }}.{{ ceph_rbd_mirror_remote_user }}.keyring"
- register: remote_user_keyring
-
- - name: get quorum_status
- command: "{{ cephadm_cmd }} shell --fsid {{ fsid }} -- ceph --cluster {{ cluster }} quorum_status --format json"
- changed_when: false
- delegate_to: "{{ groups[mon_group_name][0] }}"
- register: quorum_status
- run_once: true
- environment:
- CEPHADM_IMAGE: '{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}'
-
- - name: set_fact mon_ip_list
- set_fact:
- mon_ip_list: "{{ mon_ip_list | default([]) | union([item['addr'].split(':')[0]]) }}"
- loop: "{{ (quorum_status.stdout | from_json | default('{}'))['monmap']['mons'] }}"
- run_once: true
-
- - name: remove current mirror peer
- command: "{{ admin_rbd_cmd }} mirror pool peer remove {{ ceph_rbd_mirror_pool }} {{ ((mirror_pool_info.stdout | from_json | default('{}'))['peers'] | selectattr('site_name', 'match', '^'+ceph_rbd_mirror_remote_cluster+'$') | map(attribute='uuid') | list)[0] }}"
- delegate_to: "{{ groups.get(mon_group_name | default('mons'))[0] }}"
- changed_when: false
-
- - name: get remote user keyring secret
- set_fact:
- remote_user_keyring_secret: "{{ item.split('=', 1)[1] | trim }}"
- with_items: "{{ (remote_user_keyring.content | b64decode).split('\n') }}"
- when: "'key = ' in item"
-
- - name: create a temporary file
- tempfile:
- path: /etc/ceph
- state: file
- suffix: _ceph-ansible
- register: tmp_file
- delegate_to: "{{ groups.get(mon_group_name | default('mons'))[0] }}"
-
- - name: write secret to temporary file
- copy:
- dest: "{{ tmp_file.path }}"
- content: "{{ remote_user_keyring_secret }}"
- delegate_to: "{{ groups.get(mon_group_name | default('mons'))[0] }}"
-
- - name: re-add mirror peer
- command: "{{ admin_rbd_cmd }} mirror pool peer add {{ ceph_rbd_mirror_pool }} {{ ceph_rbd_mirror_remote_user }}@{{ ceph_rbd_mirror_remote_cluster }} --remote-mon-host {{ ','.join(mon_ip_list) }} --remote-key-file {{ tmp_file.path }}"
- delegate_to: "{{ groups.get(mon_group_name | default('mons'))[0] }}"
- changed_when: false
-
- - name: rm temporary file
- file:
- path: "{{ tmp_file.path }}"
- state: absent
- delegate_to: "{{ groups.get(mon_group_name | default('mons'))[0] }}"
-
-
- name: adopt ceph mon daemons
hosts: "{{ mon_group_name|default('mons') }}"
serial: 1