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.
