]> git.apps.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)
committerGuillaume Abrioux <gabrioux@redhat.com>
Mon, 26 Nov 2018 17:22:20 +0000 (18:22 +0100)
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>
infrastructure-playbooks/rolling_update.yml

index cfce9cc848b8b9a0d65122e58abb461680a7aad6..31f64d6f100733d55985419c52216b26ab447c66 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