Bucle ansible sobre hechos personalizados

Bucle ansible sobre hechos personalizados

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 }}"

información relacionada