Question:
Say I execute the following.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ cat test.sh #!/bin/bash echo Hello World exit 0 $ cat Hello.yml --- - hosts: MyTestHost tasks: - name: Hello yourself script: test.sh $ ansible-playbook Hello.yml PLAY [MyTestHost] **************************************************************** GATHERING FACTS *************************************************************** ok: [MyTestHost] TASK: [Hello yourself] ******************************************************** ok: [MyTestHost] PLAY RECAP ******************************************************************** MyTestHost : ok=2 changed=0 unreachable=0 failed=0 $ |
I know for sure that it was successful.
Where/how do I see the “Hello World” echo’ed/printed by my script on the remote host (MyTestHost)? Or the return/exit code of script?
My research shows me it would be possible to write a plugin to intercept module execution callbacks or something on those lines and write a log file. I would prefer to not waste my time with that.
E.g. something like the stdout in below (note that I’m running ansible and not ansible-playbook):
1 2 3 4 5 6 7 8 9 |
$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh plabb54 | success >> { "rc": 0, "stderr": "", "stdout": "Hello World\n" } $ |
Answer:
If you pass the -v
flag to ansible-playbook on the command line, you’ll see the stdout and stderr for each task executed:
1 2 |
$ ansible-playbook -v playbook.yaml |
Ansible also has built-in support for logging. Add the following lines to your ansible configuration file:
1 2 3 |
[defaults] log_path=/path/to/logfile |
Ansible will look in several places for the config file:
ansible.cfg
in the current directory where you ranansible-playbook
~/.ansible.cfg
/etc/ansible/ansible.cfg