On 25.06.2019 12:25, Josephsimon Arokiaraj wrote:
> Hi All,
>
> I am running the below code in a playbook which iterates over many
> hosts.
> This script writes the value of ver.stdout to a file. I am seeing issue
> when I run in in parallel. It is overwriting. It works good when
> serial:1
> but it consumes long time since we have large number of hosts.
>
> Any help to run in parallel and improve the time consumption?
It's not possible to write to the same file in parallel so you need to
serialize it.
Instead of doing it on the play, do it on the task.
> - name: Write version output
> local_action: lineinfile create=yes line={{ item }} insertafter=EOF
> dest={{ dest_file }}
> when: ver.stdout != ""
> with_items:
> - "{{ ver.stdout | regex_replace('\r\n' , '#' )}},{{
> inventory_hostname
> }}"
Loop through all host in the play with ansible_play_hosts and use
hostvars to get the variable and set run_once as true.
So something like this should work.
- name: Write version output
lineinfile:
create: yes
line: '{{ hostvars[item].ver.stdout | regex_replace('\r\n' , '#'
)}},{{ item }}'
insertafter: EOF
dest: {{ dest_file }}
when: hostvars[item].ver.stdout != ""
run_once: yes
delegate_to: localhost
with_items: '{{ ansible_play_hosts }}'
--
Kai Stian Olstad