I'm launching Ansible from Tower, then I'm filling the new users as a text:
{ name: user1, uid: 5000 }
{ name: user2, uid: 5001 }
I would like to iterate those users as a dictionary, something as:
- name: Print vars
debug:
var: "{{ item.name }}"
with_items: "{{ users.split('\n') }}"
But it doesn't work:
TASK [Print vars] *********************************************************************************************************************
ok: [lx-test] => (item={ name: user1, uid: 5000 }) => {
"ansible_loop_var": "item",
"item": "{ name: user1, uid: 5000 }",
"{ name: user1, uid: 5000 }": "VARIABLE IS NOT DEFINED!"
}
ok: [lx-test] => (item={ name: user2, uid: 5001 }) => {
"ansible_loop_var": "item",
"item": "{ name: user2, uid: 5001 }",
"{ name: user2, uid: 5001 }": "VARIABLE IS NOT DEFINED!"
}
Any idea how to convert that string to a real dictionary? Thanks in advance!
Best Answer
Update
The expression below
gives
Declare the variable as appropriate.
Original answer
The text is neither valid JSON nor YAML. You'll have to split the lines and read the dictionaries line by line. For example, given the text
the task below
creates the list of dictionaries
The iteration is trivial now
gives