Ansible-Schleife über benutzerdefinierte Fakten

Ansible-Schleife über benutzerdefinierte Fakten

Ich habe die folgende Struktur in benutzerdefinierten Fakten.

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

Sowie eine Aufgabe, die die Elemente durchläuft:

 tasks:                                                                                     
    - debug:                                                                                 
        msg: "src: {{ item.value.path}} dest: {{ item.value.dest }}"                         
       with_dict: "{{ ansible_local.finance.facts.files }}"

Meine Frage ist, dass ich bei dieser Struktur immer über Finanzen iteriere. Was ist, wenn ich über Finanzen und Marketing und möglicherweise weitere Elemente auf dieser Ebene iterieren möchte, vorausgesetzt, ich kenne deren Namen nicht, so wie es in den Unterdateien der Elemente gemacht wird?

Vielen Dank für die Hilfe.

Antwort1

Sie können die JMESPath-Abfrage verwenden:

- debug:
    msg: "src: {{ item.path }} dest: {{ item.dest }}"
  loop: "{{ ansible_local | json_query('[*.facts.files.*]') | flatten }}"

Antwort2

Eine Möglichkeit wäre, include_tasks zu schleifen

- include_tasks: inner.yml
  loop: "{{ lookup('dict',ansible_local) }}"
  loop_control:
    loop_var: outer_item

$ Katze inner.yml

- debug:
    msg: "dest: {{ item.value.dest }} path: {{ item.value.path }}"
  with_dict: "{{ outer_item.value.facts.files }}"

verwandte Informationen