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