]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
rolling_update: refact set_fact `mon_host`
authorGuillaume Abrioux <gabrioux@redhat.com>
Thu, 22 Nov 2018 16:52:58 +0000 (17:52 +0100)
committermergify[bot] <mergify[bot]@users.noreply.github.com>
Mon, 26 Nov 2018 19:36:30 +0000 (19:36 +0000)
each monitor node should select another monitor which isn't itself.
Otherwise, one node in the monitor group won't set this fact and causes
failure.

Typical error:
```
TASK [create potentially missing keys (rbd and rbd-mirror) when mon is containerized] ***
task path: /home/jenkins-build/build/workspace/ceph-ansible-prs-dev-update_docker_cluster/rolling_update.yml:200
Thursday 22 November 2018  14:02:30 +0000 (0:00:07.493)       0:02:50.005 *****
fatal: [mon1]: FAILED! => {}

MSG:

The task includes an option with an undefined variable. The error was: 'dict object' has no attribute u'mon2'
```

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
(cherry picked from commit af78173584f1b3a99515e9b94f450be22420c545)

infrastructure-playbooks/rolling_update.yml

index b125edb33c2f63aacb00045bda8761a306ef14b0..8a6f4c37d83f969466e2f0f272140d4084a89237 100644 (file)
       set_fact: mon_host_count={{ groups[mon_group_name] | length }}
 
     - name: select a running monitor if multiple monitors
-      set_fact: mon_host={{ item }}
-      with_items: "{{ groups[mon_group_name] }}"
-      when:
-        - mon_host_count | int > 1
-        - item != inventory_hostname
-
-    - name: select first monitor if only one monitor
-      set_fact: mon_host={{ item }}
-      with_items: "{{ groups[mon_group_name][0] }}"
-      when:
-        - mon_host_count | int == 1
+      set_fact:
+        mon_host: "{{ groups[mon_group_name] | difference([inventory_hostname]) | last if mon_host_count > 1 else groups[mon_group_name] | last }}"
 
     - name: non container | waiting for the monitor to join the quorum...
       command: ceph --cluster "{{ cluster }}" -s --format json