# Processing ansible's output in shell script

**URL:** <https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380>\
**Category:** Ansible Project\
**Created:** [August 25, 2016, 9:39am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380 "2016-08-25T09:39:50Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 25, 2016, 9:39am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/1 "2016-08-25T09:39:50Z")

</div>

Hi All,

I have a shell script from which I am invoking an ansible playbook.

My playbook checks for some status of my services and I want this information to be available in my shell script after playbook execution is complete.

I have to share data from ansible to shell script that invoked the playbook.

Any idea how can we do that?

Thanks

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [August 25, 2016, 3:23pm UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/2 "2016-08-25T15:23:18Z")

</div>

You might want to use a custom callback to modify the output to a format you want to consume.

---

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 25, 2016, 8:13pm UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/3 "2016-08-25T20:13:36Z")

</div>

Hi Brian, can you please provide me with an example or any link to samples of this custom call back?

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [August 25, 2016, 8:36pm UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/4 "2016-08-25T20:36:50Z")

</div>

[https://docs.ansible.com/ansible/developing\_plugins.html#callbacks](https://docs.ansible.com/ansible/developing_plugins.html#callbacks)

---

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 26, 2016, 9:33am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/5 "2016-08-26T09:33:34Z")

</div>

The callbacks don’t work as using callback I am not able to remove messages like

`

PLAY [all] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

TASK [cmx\_running\_services] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

…

PLAY RECAP \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
172.31.35.225 : ok=2 changed=0 unreachable=0 failed=0  
172.31.9.253 : ok=2 changed=0 unreachable=0 failed=0

`

I want my playbook to output only in json format and no such text like above

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [August 26, 2016, 10:06am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/6 "2016-08-26T10:06:22Z")

</div>

Have you tried json call\_back\_plugin, it does exactly that?

[https://docs.ansible.com/ansible/intro\_configuration.html#stdout-callback](https://docs.ansible.com/ansible/intro_configuration.html#stdout-callback)

---

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 26, 2016, 10:45am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/7 "2016-08-26T10:45:25Z")

</div>

Yes I tried it and it outputs json content for each task. Something like this:

`

TASK [create some file] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
ok: [172.31.9.253 → localhost]  
{“group”: “ubuntu”, “\_ansible\_no\_log”: false, “\_ansible\_delegated\_vars”: {“ansible\_host”: “localhost”}, “changed”: false, “host”: “172.31.9.253”, “invocation”: {“module\_args”: {“directory\_mode”: null, “force”: false, “remote\_src”: null, “path”: “/tmp/services\_status.json.tmp”, “owner”: null, “follow”: true, “group”: null, “state”: null, “content”: null, “serole”: null, “diff\_peek”: null, “setype”: null, “dest”: “/tmp/services\_status.json.tmp”, “selevel”: null, “original\_basename”: “services.j2”, “regexp”: null, “validate”: null, “src”: null, “seuser”: null, “recurse”: false, “delimiter”: null, “mode”: null, “backup”: null}}, “state”: “file”, “gid”: 1000, “mode”: “0664”, “diff”: {“after”: {“path”: “/tmp/services\_status.json.tmp”}, “before”: {“path”: “/tmp/services\_status.json.tmp”}}, “owner”: “ubuntu”, “path”: “/tmp/services\_status.json.tmp”, “size”: 542, “uid”: 1000}  
ok: [172.31.35.225 → localhost]  
{“group”: “ubuntu”, “\_ansible\_no\_log”: false, “\_ansible\_delegated\_vars”: {“ansible\_host”: “localhost”}, “changed”: false, “host”: “172.31.35.225”, “invocation”: {“module\_args”: {“directory\_mode”: null, “force”: false, “remote\_src”: null, “path”: “/tmp/services\_status.json.tmp”, “owner”: null, “follow”: true, “group”: null, “state”: null, “content”: null, “serole”: null, “diff\_peek”: null, “setype”: null, “dest”: “/tmp/services\_status.json.tmp”, “selevel”: null, “original\_basename”: “services.j2”, “regexp”: null, “validate”: null, “src”: null, “seuser”: null, “recurse”: false, “delimiter”: null, “mode”: null, “backup”: null}}, “state”: “file”, “gid”: 1000, “mode”: “0664”, “diff”: {“after”: {“path”: “/tmp/services\_status.json.tmp”}, “before”: {“path”: “/tmp/services\_status.json.tmp”}}, “owner”: “ubuntu”, “path”: “/tmp/services\_status.json.tmp”, “size”: 542, “uid”: 1000}

TASK [debug] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
…

`

This is not helpful to me as I only want json output and no thing in between, because in shell script I want to read this output and convert the output to json object.  
Please let me know if I am not clear with my requirement.

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [August 26, 2016, 10:54am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/8 "2016-08-26T10:54:57Z")

</div>

When I run with the json callback in 2.1.1 I only get json output in return. Your output indicate you are not using json callback\_plugin.  
So how do you set up Ansible to use json callback?

---

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 26, 2016, 11:33am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/9 "2016-08-26T11:33:32Z")

</div>

I just added in my ansible.cfg file:

`

stdout\_callback = skippy  
callback\_plugins = /home/ubuntu/projects/package/target/ansible/plugins/callback

`

Downloaded plugin from [https://github.com/petems/ansible-json](https://github.com/petems/ansible-json) and added it in the above folder.  
Now when I execute the playbook, I get the kind of output I mentioned earlier

I also tried using plugin from [https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/callback/json.py](https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/callback/json.py)

But it gives me syntax error in “json.py” when I execute my playbook. I think it requires Python 3, I am having python 2.7.6 and I can’t upgrade to python 3

I am using Ansible version 2.1.1.0

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [August 26, 2016, 11:53am UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/10 "2016-08-26T11:53:17Z")

</div>

Ansible comes with the json callback plugins and some others you'll find them in /usr/lib/python2.7/dist-packages/ansible/plugins/callback/

To use the provided json callback set "stdout\_callback = json" and remove the "callback\_plugins =" in your ansible.cfg. Then you should only get a json output.

---

<div class="post-metadata">

**Author:** ![ankur.cool](https://avatars.discourse-cdn.com/v4/letter/a/f08c70/32.png) [@ankur.cool](https://forum.ansible.com/u/ankur.cool)\
**Post date:** [August 26, 2016, 12:38pm UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/11 "2016-08-26T12:38:32Z")

</div>

wow it worked 🙂 thanks Kai

However just one last question, I have multiple playbook but I want this json out only for one. So I cant have this config in ansible.cfg  
Is there a way to pass this config other than editing this ansible.cfg file?

---

<div class="post-metadata">

**Author:** ![Brian\_Coca](https://avatars.discourse-cdn.com/v4/letter/b/6de8d8/32.png) [@Brian\_Coca](https://forum.ansible.com/u/Brian_Coca)\
**Post date:** [August 26, 2016, 1:05pm UTC](https://forum.ansible.com/t/processing-ansibles-output-in-shell-script/22380/12 "2016-08-26T13:05:13Z")

</div>

use the ANSIBLE\_STDOUT\_CALLBACK environment varialbe:

ANSIBLE\_STDOUT\_CALLBACK=json ansible-playbook …
