# How to get clean output ?

**URL:** <https://forum.ansible.com/t/how-to-get-clean-output/32206>\
**Category:** Ansible Project\
**Created:** [February 11, 2020, 9:28pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206 "2020-02-11T21:28:57Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 11, 2020, 9:28pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/1 "2020-02-11T21:28:57Z")

</div>

Hi,  
How will I get only the sql statement from the json output ? I am registering this as " register: query\_result"

Here is my json output

`

“msg”: {  
“ansible\_facts”: {  
“discovered\_interpreter\_python”: “/usr/bin/python”  
},  
“changed”: false,  
“failed”: false,  
“msg”: [  
[  
“Revoke EXECUTE on UTL\_FILE from TESTACC1;”  
],  
[  
“Revoke EXECUTE on UTL\_FILE from TESTACC2;”  
]  
]  
}  
}

`

If I do

- local\_action:  
copy content={{query\_result.msg}}  
dest=/home/ansible/Playbooks/{{sname}}/sql/revoke.sql

I am getting  
[[“Revoke EXECUTE on UTL\_FILE from TESTACC1;”], [“Revoke EXECUTE on UTL\_FILE from TESTACC2;”]]

I need to get this  
Revoke EXECUTE on UTL\_FILE from TESTACC1; Revoke EXECUTE on UTL\_FILE from TESTACC2;

---

<div class="post-metadata">

**Author:** ![hugonz](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/hugonz/32/503_2.png) [@hugonz](https://forum.ansible.com/u/hugonz)\
**Post date:** [February 11, 2020, 9:38pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/2 "2020-02-11T21:38:45Z")

</div>

Without knowing anything about how you got those values, it would be {{ query\_result.msg | join(’ ') }}

---

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 11, 2020, 10:02pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/3 "2020-02-11T22:02:45Z")

</div>

Thanks Hugo for helping me. Basically I am running a sql command that runs a sql query which gives the below results. (this is a debug out)

“msg”: {  
“ansible\_facts”: {  
“discovered\_interpreter\_python”: “/usr/bin/python”  
},  
“changed”: false,  
“failed”: false,  
“msg”: [  
[  
“Revoke EXECUTE on UTL\_FILE from TESTACC1;”  
],  
[  
“Revoke EXECUTE on UTL\_FILE from TESTACC2;”  
]  
]  
}  
}

What I need to do is to generate another sql statement using this json output. When I run your command, it gives me  
[u’Revoke EXECUTE on UTL\_FILE from TESTACC1;‘][u’Revoke EXECUTE on UTL\_FILE from TESTACC2;’]

Is there a filter or something we can use to get a cleaner output ?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [February 11, 2020, 10:29pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/4 "2020-02-11T22:29:40Z")

</div>

Try "template". For example

&nbsp;&nbsp;&nbsp;&nbsp;- local\_action:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;template src=revoke.sql.j2  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest=/home/ansible/Playbooks/{{sname}}/sql/revoke.sql

with the template

$ cat revoke.sql.j2  
{% for line in query\_result.msg|flatten %}  
{{ line }}  
{% endfor %}

give

$ cat revoke.sql  
Revoke EXECUTE on UTL\_FILE from TESTACC1;  
Revoke EXECUTE on UTL\_FILE from TESTACC2;

HTH,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [February 11, 2020, 10:39pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/5 "2020-02-11T22:39:42Z")

</div>

To keep the element of the list in one line change the template. For example

$ cat revoke.sql.j2  
{% for line in query\_result.msg|flatten %}{{ line }}{% endfor %}

HTH,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 11, 2020, 10:57pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/6 "2020-02-11T22:57:09Z")

</div>

Thank you so much Vlado. This works fine.

---

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 11, 2020, 10:59pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/7 "2020-02-11T22:59:04Z")

</div>

Instead of maintaining another template file. Can I embed the content in the playbook itself ?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [February 11, 2020, 11:06pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/8 "2020-02-11T23:06:25Z")

</div>

Sure you can. Put it into the "content". For example

&nbsp;&nbsp;&nbsp;&nbsp;- local\_action:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copy dest=/scratch/tmp/revoke.sql  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content="{% for line in query\_result.msg|flatten %}{{ line }}{%  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endfor %}"

But, why to get rid of the flexibility and modularity?

HTH,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 12, 2020, 4:51pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/9 "2020-02-12T16:51:12Z")

</div>

Thanks Vlado,  
We don’t want to maintain separate files.

Here is my

- name: Generate Revoke Statement  
local\_action:  
copy dest= /home/ansible/query.sql  
content= {% for line in query\_result.msg|flatten %} {{ line }} {% endfor %}  
connection: local

I get → localhost]: FAILED! =\> {“changed”: false, “msg”: “dest is required”}

Is that something I am missing ?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [February 12, 2020, 6:48pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/10 "2020-02-12T18:48:50Z")

</div>

Very probably the problem is the formatting and indentation of the "shorthand  
syntax". Try this

&nbsp;&nbsp;&nbsp;&nbsp;- name: Generate Revoke Statement  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copy:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dest: /home/ansible/query.sql  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;content: |  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{% for line in query\_result.msg|flatten %} {{ line }} {% endfor %}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delegate\_to: localhost  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection: local

HTH,

&nbsp;&nbsp;-vlado

---

<div class="post-metadata">

**Author:** ![Anand\_Solomon](https://avatars.discourse-cdn.com/v4/letter/a/6f9a4e/32.png) [@Anand\_Solomon](https://forum.ansible.com/u/Anand_Solomon)\
**Post date:** [February 12, 2020, 8:49pm UTC](https://forum.ansible.com/t/how-to-get-clean-output/32206/11 "2020-02-12T20:49:03Z")

</div>

Thank you so much Vlado.

It works fine.
