Tengo la siguiente variable cargada a través de 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
Quiero alimentar esta información al shellcomando para establecer los permisos apropiados.
He probado algunas técnicas desde aquí: http://docs.ansible.com/playbooks_loops.html pero no pude encontrar una solución que funcione.
¿Es posible iterar esta estructura? Si no es así, ¿cómo lo reestructuro para que funcione? ¿Es posible hacer esto sin romper la regla DRY (por ejemplo, incluir el nombre de usuario en cada registro)?

shellmódulo porque necesito hacer ACL recursiva y eso no es compatible con elaclmódulo.shelles su mejor apuesta con ACL y recursividad.recursiveen mi ejemplo? Cuando trato de acceder y falta, Ansible detendrá la ejecución del libro de jugadas y lanzará una excepción. Prefiero no agregarrecursive: falsea todos los registros.{{ some_variable | default() }}. Entonces, en este caso:{{ item.1.recursive | default(false) }}Este es un buen ejemplo de salida que puede probar usted mismo. Crea un nuevo libro de jugadas llamado
iteration_loop.yml:Luego ejecute el libro de jugadas de esta manera:
ansible-playbook -i '172.16.222.131,' iteration_loop.ymly la salida debería darle cómo se accede a los elementos:
fuente
Asumiendo eso
dict={a:[1,2,3],b:[1,2]}y así sucesivamente:Ahora
flattened == [1,2,3,1,2]fuente
Reformatearé sus vars al siguiente formato:
y luego mi libro de jugadas como a continuación:
fuente