Ansible operates on an internal loop. Tasks are executed (and facts set) on
'per-device' basis. If you need the results of all the checks I suggest you
do the following:

1. Register the results and store them into files on the controller (either
can run as internal ansible loop or manual set of tasks)
2. Add another play in your playbook that's executed on the localhost -
check the content of each of the files and identify if you have to restart
or not. You can store this as a fact against 'localhost' so it's accessible
via hostvars['localhost']['var_name']
3. Add yet another play that conditionally restarts all the servers if the
content of the variable indicates the need for a restart

the whole thing can be also done without storing info in the files - you
can loop over all hosts in a group so you can access the results of the
check.

kind regards
Pshem


On Mon, 20 Nov 2017 at 19:15 shashank pai <[email protected]> wrote:

>
> down votfavorite
> <https://stackoverflow.com/questions/47330287/or-condition-in-ansible-skips-the-hosts-that-are-not-matched-in-condition/47330708#>
>
> I am trying to check memory consumption of four machines and any of the
> machines memory consumption is less than 10 GB I want to restart services
> on all machines.
>
> I have used or operator in when condition, I am able to restart the
> services only on the ones that have memory less than 10 GB others get
> skipped. My requirement is if any of the hosts memory goes down below 10GB
> I want services to be restarted on all machines not just on machines that
> have memory below 10GB.
>
> Below is the Ansible playbook:
>
>
> - hosts: webapp
> become: true
> become_method: sudo
> gather_facts: yes
> vars:
> servers:
> "10.0.0.1": "machine1"
> "10.0.0.2": "machine2"
> "10.0.0.3": "machine3"
> "10.0.0.4": "machine4"
> tasks:
> - name: get mem free for machine1
> shell: free -g | grep Mem | awk '{print $4}'
> register: machine1_mem
> - debug: var=machine1_mem.stdout
> when: servers[ansible_default_ipv4.address] == "machine1"
> - name: get mem free for machine2
> shell: free -g | grep Mem | awk '{print $4}'
> register: machine2_mem
> - debug: var=machine2_mem.stdout
> when: servers[ansible_default_ipv4.address] == "machine2"
> - name: get mem free for machine3
> shell: free -g | grep Mem | awk '{print $4}'
> register: machine3_mem
> - debug: var=machine3_mem.stdout
> when: servers[ansible_default_ipv4.address] == "machine3"
> - name: get mem free for machine4
> shell: free -g | grep Mem | awk '{print $4}'
> register: machine4_mem
> - debug: var=machine4_mem.stdout
> when: servers[ansible_default_ipv4.address] == "machine4"
> - name: restart web services
> when: ( machine4_mem.stdout|int <= 10 or machine1_mem.stdout|int <= 10 or 
> machine3_mem.stdout|int <= 10 or machine2_mem.stdout|int <= 10 )
>       action: service name=httpd state=restarted
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/ansible-project/be9b8961-8013-444f-8c99-1939d25b6757%40googlegroups.com
> <https://groups.google.com/d/msgid/ansible-project/be9b8961-8013-444f-8c99-1939d25b6757%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAEaZiRW7Eu96gt4y2XqWkY6FTD_4xDQUQJfa-4wtjuJqQwNQ9A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to