I understand the problem. Thanks for restating it concisely. Your template *is* creating /home/user1/mksysb_error_report.out, but not on localhost. It's creating it on each of the target hosts. It's doing *that* because of the leading tabs I asked you about earlier. There's one in front of your "run_once: True" and another in front of your "delegate_to: localhost". So even though it may look correctly indented on your screen, your old Ansible sees it as being part of the body of your template, so it's running the copy task on each of the target hosts, creating the file there instead of once locally.
I could only get your originally posted playbook to run on my local "ansible [core 2.14.2]" if I removed the tabs and fixed the indentation. Otherwise it would error out immediately complaining about the tabs. However, I still have access to an environment with "ansible 2.10.15", and there your code — with Vladimir Botka's clever hack of setting the necessary variables in the inventory — runs just fine, tabs and all, as described above. Remove the tabs from the three lines that have them and run your test again. Also, look on the target hosts and see if /home/user1/mksysb_error_report.out exists. I expect it will. On Sunday, February 26, 2023 at 9:11:03 PM UTC-5 Kenady Inampudi wrote: > Hi Todd, > > my original playbook works just fine, the problem is with the second one > where i want the report just for the failed ones, my first play book give > me all the output due to special variable {% for host in > ansible_play_hosts_all > %} > > I tried to use if condition to filter the result of the failed ones > > {% for host in ansible_play_hosts_all %} > {% if 'Completed Successfully' not in hostvars[host]['mksys']['msg'] %} > > {{ '###' }}{{ host }}{{ '###' }} > {{ '--------------------------' }} > {{ hostvars[host]['mksys']['msg'] }} > {% endif %} > {% endfor %} > > This condition generates nothing., If am running the play on 100 nodes and > 5 failed, i want the "hostvars[host]['mksys']['msg']" of the failed ones to > a file. > On Monday, 27 February 2023 at 04:52:57 UTC+5:30 Todd Lewis wrote: > >> I tried running your code on my local machine. Of course I don't have >> "mksysb" so I had to substitute things I've got, but your logic with >> respect to "failed_when:" and "hostvars[host]['mksys']['msg']" appears to >> be okay. >> >> The only thing that stuck out to me is that you have some leading tabs in >> your original post's yaml. Perhaps that's an artifact of posting, email, >> etc., but do check for tabs and retest if you find any. Either way let us >> know. >> >> On Sunday, February 26, 2023 at 10:32:26 AM UTC-5 Kenady Inampudi wrote: >> >>> I am trying to create a report of failed servers output. >>> >>> Here is my playbook >>> --- >>> - hosts: all >>> gather_facts: no >>> tasks: >>> - name: "Runing mksysb backup" >>> mksysb: >>> name: "{{inventory_hostname}}.mksysb" >>> storage_path: /backup >>> exclude_files: yes >>> register: mksys >>> failed_when: '"mksysb: Backup Completed Successfully" not in >>> mksys.msg' >>> - name: Copy output to file >>> copy: >>> dest: /home/user1/mksysb_error_report.out >>> content: |- >>> {% for host in ansible_play_hosts_all %} >>> {{ '###' }}{{ host }}{{ '###' }} >>> {{ '------------------------------------' }} >>> {{ hostvars[host]['mksys']['msg'] }} >>> {% endfor %} >>> run_once: True >>> delegate_to: localhost >>> >>> This gives me output of all the hosts, where i am looking to create the >>> output of failed hosts >>> >>> i tried something like this which gives me nothing >>> >>> {% for host in ansible_play_hosts_all %} >>> * {% if 'Completed Successfully' in >>> hostvars[host]['mksys']['msg'] %}* >>> {{ '###' }}{{ host }}{{ '###' }} >>> {{ '--------------------------' }} >>> {{ hostvars[host]['mksys']['msg'] }} >>> *{% endif %}* >>> {% endfor %} >>> >>> Could some help me out to put condition so i can get the output of just >>> the failed hosts. >>> >> -- 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 ansible-project+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/662ae4ae-9c97-494e-8230-7546fecfca99n%40googlegroups.com.