I've been trying to figure out for hours how to do the following with Ansible, and looping through a JSON output.
Let me explain, here is my playbook:
- hosts: myhosts
connection: local
gather_facts: yes
tasks:
- name: set_fact
set_fact:
disk_info: "{{ disks | json_query('[*].{disk_size: disksize}')}}"
- name: print set_fact
debug:
msg: "{{ disk_info }}"
- name: iterate on disk_info one and increase index 1..n
debug:
msg: "{{ item }} {{ my_idx }}"
loop:
- "{{ disk_info }}"
loop_control:
index_var: my_idx
Here is the json output that task - name: print
outputs:
TASK [print] ****************************************************
ok: [hostname1] => {
"msg": [
{
"disk_size": "200"
},
{
"disk_size": "200"
},
{
"disk_size": "200"
}
]
}
ok: [hostname2] => {
"msg": [
{
"disk_size": “300"
}
]
}
ok: [hostname3] => {
"msg": [
{
"disk_size": "250”
}
]
}
ok: [hostname4] => {
"msg": [
{
"disk_size": “500"
},
{
"disk_size": “600”
}
]
}
Here the output I'm getting from my task (- name: iterate on disk_info one and increase index 1..n
)
ok: [hostname1] => (item=[{'disk_size': '200'}, {'disk_size': '200'}, {'disk_size': '200'}]) => {
"msg": "[{'disk_size': '200'}, {'disk_size': '200'}, {'disk_size': '200'}] 0"
}
ok: [hostname2] => (item=[{'disk_size': ‘300'}]) => {
"msg": "[{'disk_size': ‘300'}] 0"
}
ok: [hostname4] => (item=[{'disk_size': ‘500'}, {'disk_size': '600’}]) => {
"msg": "[{'disk_size': ’500'}, {'disk_size': '600’}] 0"
}
Expected output:
Hostname1:
disk_size1: 200
disk_size2: 200
disk_size3: 200
Hostname2:
disk_size1: 300
Hostname3:
disk_size1: 500
disk_size2: 600
The expected output can be something similar but adding the index.