Mam następującą zmienną załadowaną przez 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
Chcę podać te informacje do shell
polecenia, aby ustawić odpowiednie uprawnienia.
Próbowałem stąd kilku technik: http://docs.ansible.com/playbooks_loops.html, ale nie udało mi się znaleźć działającego rozwiązania.
Czy można iterować tę strukturę? Jeśli nie, to jak mam go przebudować, aby działał? Czy można to zrobić bez naruszenia reguły DRY (np. Dołącz nazwę użytkownika do każdego rekordu)?
shell
modułu, ponieważ muszę wykonywać rekurencyjną listę ACL, która nie jest obsługiwana przezacl
moduł.shell
to, że jest to najlepszy zakład z listami ACL i rekurencją.recursive
w moim przykładzie? Kiedy próbuję uzyskać do niego dostęp i brakuje go, Ansible przerwie wykonywanie podręcznika i wyrzuci wyjątek. Wolę nie dodawaćrecursive: false
do każdego rekordu.{{ some_variable | default() }}
. Tak więc w tym przypadku:{{ item.1.recursive | default(false) }}
To dobry przykład wyjścia, którego możesz spróbować sam. Utwórz nowy podręcznik o nazwie
iteration_loop.yml
:Następnie uruchom podręcznik w następujący sposób:
ansible-playbook -i '172.16.222.131,' iteration_loop.yml
a wynik powinien dać ci dostęp do elementów:
źródło
Zakładając, że
dict={a:[1,2,3],b:[1,2]}
i tak dalej:Teraz
flattened == [1,2,3,1,2]
źródło
Ponownie sformatuję twoje zmienne do poniższego formatu:
a następnie mój poradnik, jak poniżej:
źródło