
Tengo la siguiente estructura en hechos personalizados.
{
"ansible_local":{
"finance":{
"facts":{
"files":{
"file1":{
"dest":"/tmp/dir1",
"path":"/etc/finance/file1"
},
"file2":{
"dest":"/tmp/dir2",
"path":"/etc/finance/file2"
}
}
}
},
"marketing":{
"facts":{
"files":{
"file1":{
"dest":"/tmp/dir1",
"path":"/etc/finance/file1"
},
"file2":{
"dest":"/tmp/dir2",
"path":"/etc/finance/file2"
}
}
}
}
}
}
Además de una tarea que itera sobre los elementos:
tasks:
- debug:
msg: "src: {{ item.value.path}} dest: {{ item.value.dest }}"
with_dict: "{{ ansible_local.finance.facts.files }}"
Mi pregunta es que, dada esta estructura, siempre estoy repitiendo las finanzas. ¿Qué sucede si quiero iterar sobre finanzas y marketing y potencialmente más elementos en este nivel suponiendo que no sé su nombre, igual que se hace en los archivos undes de elementos?
Muchas gracias por la ayuda.
Respuesta1
Puede utilizar la consulta JMESPath:
- debug:
msg: "src: {{ item.path }} dest: {{ item.dest }}"
loop: "{{ ansible_local | json_query('[*.facts.files.*]') | flatten }}"
Respuesta2
Una opción sería hacer un bucle include_tasks
- include_tasks: inner.yml
loop: "{{ lookup('dict',ansible_local) }}"
loop_control:
loop_var: outer_item
$ gato interior.yml
- debug:
msg: "dest: {{ item.value.dest }} path: {{ item.value.path }}"
with_dict: "{{ outer_item.value.facts.files }}"