Conditional Delegation to a host for synchronize module

34 views
Skip to first unread message

Raj V

unread,
Apr 20, 2020, 2:14:23 PM4/20/20
to Ansible Project
Hello,

I am a newbie to Ansible and trying to figure out how to synchronize between 3 hosts based on condition. Below are details:
There are 3 nodes and based on which node is primary (I was able to get a custom fact set for it) need to delegate to that host (which runs synchronize from that host to other two hosts).
Custom fact basically is  value 1 or 0 (1 means Primary/Master and 0 means not).
I am unable to get the hostname (primary hostname) value to include into the synchronize steps. Below is the playbook I have. How do I make synchronize read the "primary" hostname value to run the next steps.

---

- name: Playbook for rsync
  become: yes
  hosts: clients
  gather_facts: True

  tasks:
  - name: Task to rsync from Primary server
    synchronize:
      src: "{{ item.source }}"
      dest: "{{ item.dest }}"
    with_items:
      - { source: '/rsynctest/', dest: '/rsynctest/' }
      - { source: '/rsynctest1/', dest: '/rsynctest1/' }
    delegate_to: "{{ ansible_hostname }}"
    when:
      - ansible_local.determine.isprimary  == "1"


Thanks
-Raj

Kai Stian Olstad

unread,
Apr 26, 2020, 6:02:11 PM4/26/20
to ansible...@googlegroups.com
The best thing you can do is create a fact or run a command that can find the
name of the host and use that in the when.

As you have done it here you need to loop over all host, check if they have
the variable, check if it 1 and if so get the name.

--
Kai Stian Olstad

Raj V

unread,
May 5, 2020, 3:52:27 PM5/5/20
to Ansible Project
Hi Kai,
I have resolved my issue with group_by. Grouping by primary and non-primary and run commands on non-primary hosts.
Thank you for your suggestions.
Reply all
Reply to author
Forward
0 new messages