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 shell
comando 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)?
shell
módulo porque necesito hacer ACL recursiva y eso no es compatible con elacl
módulo.shell
es su mejor apuesta con ACL y recursividad.recursive
en 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: false
a 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.yml
y 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