Eu tenho a seguinte variável carregada via 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
Desejo alimentar essas informações com o shell
comando para definir as permissões apropriadas.
Eu tentei algumas técnicas aqui: http://docs.ansible.com/playbooks_loops.html, mas não consegui encontrar a solução que funcionava.
É possível iterar essa estrutura? Caso contrário, como faço para reestruturá-lo para fazê-lo funcionar? É possível fazer isso sem violar a regra DRY (por exemplo, incluir nome de usuário em todos os registros)?
shell
módulo porque preciso fazer ACL recursiva e isso não é suportado peloacl
módulo.shell
é sua melhor aposta com ACLs e recursão.recursive
no meu exemplo? Quando tento acessá-lo e ele está ausente, o Ansible interrompe a execução do manual e lança uma exceção. Eu prefiro não adicionarrecursive: false
para cada registro.{{ some_variable | default() }}
. Portanto, neste caso:{{ item.1.recursive | default(false) }}
Este é um bom exemplo de saída que você pode tentar. Crie um novo manual chamado
iteration_loop.yml
:Em seguida, execute o manual assim:
ansible-playbook -i '172.16.222.131,' iteration_loop.yml
e a saída deve fornecer como os itens são acessados:
fonte
Supondo que
dict={a:[1,2,3],b:[1,2]}
e assim por diante:Agora
flattened == [1,2,3,1,2]
fonte
Vou reformatar seus vars para o formato abaixo:
e então meu manual como abaixo:
fonte