Prevent ansible from re-ordering JSON?

39 views
Skip to first unread message

Eddie Mashayev

unread,
Nov 6, 2018, 8:20:15 AM11/6/18
to Ansible Project
Hey,

I've this weird situation when I'm passing json(as a string) it still reordering it's order and not consistent.

Example:
my_var: |
  {
    "b": 1
    "a": 2
  }

when running ansible with

- name: "Set up json file"
  copy
:
    dest
: "/tmp/file.json"
    content
: "{{ my_var }}"


every ansible run the file is being changed(because json order is being changed), in order to fix it I'm using:
content: "{{ my_var | from_json | to_nice_json }}"

This command keeps the order the same each run, because to_nice_json sorts the output (`sort_keys=True`).

My question is why my_var is being changed all the time even it's a string and not json

Kai Stian Olstad

unread,
Nov 6, 2018, 11:22:21 AM11/6/18
to ansible...@googlegroups.com
On Tuesday, 6 November 2018 14:20:15 CET Eddie Mashayev wrote:
> I've this weird situation when I'm passing json(as a string) it still
> reordering it's order and not consistent.
>
> Example:
>
> my_var: |
> {
> "b": 1
> "a": 2
> }
>
>
> when running ansible with
>
> - name: "Set up json file"
> copy:
> dest: "/tmp/file.json"
> content: "{{ my_var }}"
>
>
> every ansible run the file is being changed(because json order is being
> changed), in order to fix it I'm using:
> content: "{{ my_var | from_json | to_nice_json }}"
>
> My question is why *my_var* is being changed all the time even it's a
> string and *not* json

This is something Ansible is inherited from Python, dictionary in Python is unordered.

--
Kai Stian Olstad


Eddie Mashayev

unread,
Nov 6, 2018, 1:17:11 PM11/6/18
to Ansible Project
Thanks.

Eddie Mashayev

unread,
Nov 7, 2018, 1:06:43 AM11/7/18
to ansible...@googlegroups.com
Hey Kai,

The thing is that is not a dictionary but string, pay attention to the "|" after my_var:

my_var: |
  {
    "b": 1
    "a": 2
  }
So the question is still the same, why string is unordered in Ansible?

Thanks,
Eddie Mashayev
Cell : 054-4692519


--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/2if2Cy_pHfM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/0e6051f2-8f2f-4763-8d84-4d3530024e71%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Brian Coca

unread,
Nov 7, 2018, 10:44:26 AM11/7/18
to ansible...@googlegroups.com
To 'keep it a string' content: "{{ my_var|string }}" , from_json
actually forces conversion (which would be happening anyways)



--
----------
Brian Coca
Reply all
Reply to author
Forward
0 new messages