Ich habe die folgende Variable geladen über include_vars
:
access:
username-foo:
- path: /
permissions: rwX
recursive: true
username-bar:
- path: /
permissions: rX
- path: /css
permissions: rwX
recursive: true
- path: /data
permissions: rX
- path: /data/reviews.yml
permissions: rw
- path: /js
permissions: rX
- path: /js/*.js
permissions: rw
Ich möchte diese Informationen an den shell
Befehl weitergeben, um die entsprechenden Berechtigungen festzulegen.
Ich habe hier einige Techniken ausprobiert: http://docs.ansible.com/playbooks_loops.html, konnte aber keine funktionierende Lösung finden.
Ist es möglich, diese Struktur zu iterieren? Wenn nicht, wie strukturiere ich es um, damit es funktioniert? Ist es möglich, dies zu tun, ohne die DRY-Regel zu brechen (z. B. Benutzernamen in jeden Datensatz aufnehmen)?
shell
Modul, weil ich eine rekursive ACL ausführen muss, die vomacl
Modul nicht unterstützt wird .shell
ist Ihre beste Wette mit ACLs und Rekursion.recursive
in meinem Beispiel zu ignorieren ? Wenn ich versuche, darauf zuzugreifen, und es fehlt, stoppt Ansible die Ausführung des Playbooks und löst eine Ausnahme aus. Ich ziehe es vor, nichtrecursive: false
zu jedem Datensatz hinzuzufügen .{{ some_variable | default() }}
. Also, in diesem Fall:{{ item.1.recursive | default(false) }}
Dies ist ein gutes Ausgabebeispiel, das Sie selbst ausprobieren können. Erstelle ein neues Spielbuch mit dem Namen
iteration_loop.yml
:Dann starte das Playbook wie folgt:
ansible-playbook -i '172.16.222.131,' iteration_loop.yml
und die Ausgabe sollte Ihnen anzeigen, wie auf die Elemente zugegriffen wird:
quelle
Vorausgesetzt, dass
dict={a:[1,2,3],b:[1,2]}
und so weiter:Jetzt
flattened == [1,2,3,1,2]
quelle
Ich werde Ihre vars auf das folgende Format formatieren:
und dann mein playbook wie folgt:
quelle