From: Guillaume Abrioux Date: Thu, 22 Nov 2018 16:52:58 +0000 (+0100) Subject: rolling_update: refact set_fact `mon_host` X-Git-Tag: v4.0.0beta1~197 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=af78173584f1b3a99515e9b94f450be22420c545;p=ceph-ansible.git rolling_update: refact set_fact `mon_host` 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 --- diff --git a/infrastructure-playbooks/rolling_update.yml b/infrastructure-playbooks/rolling_update.yml index cfce9cc84..31f64d6f1 100644 --- a/infrastructure-playbooks/rolling_update.yml +++ b/infrastructure-playbooks/rolling_update.yml @@ -161,17 +161,8 @@ 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