file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes
irá definir diretórios para 755 e arquivos para 644.
Em ansible, eu posso fazer isso:
file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes
E recursivamente define o proprietário, o grupo e as permissões para 0775 em todos os diretórios e arquivos nesse caminho. Mas eu quero definir diretórios para 0775 e arquivos para 0664. Existe alguma maneira de fazer ansible fazer isso?
The Ansible file/copy modules don't give you the granularity of specifying permissions based on file type so you'd most likely need to do this manually by doing something along these lines:
- name: Ensure directories are 0755 command: find {{ path }} -type d -exec chmod 0755 {} \; - name: Ensure files are 0644 command: find {{ path }} -type f -exec chmod 0644 {} \;
These would have the effect of recursing through
{{ path }}
and changing the permissions of every file or directory to the specified permissions.
Fonte: link
Se você quiser usar o arquivo de módulo em ansible, você pode:
file: dest=/foo/bar/somedir owner=root group=apache mode=0644 recurse=yes
file: dest=/foo/bar/somedir owner=root group=apache mode=0775
Com este método, você primeiro configura todo o arquivo (recurse = yes) para '644' e depois ajusta / foo / bar / somedir para '775'.
Isto não é perfeito porque irá alterar a sua permissão de diretório cada vez que você jogar o seu playbook. Mas pelo menos é idempotente, não como o comando do módulo.
Se você não quiser ter o status "alterado", poderá usar o status do módulo. Ele irá listar todos os arquivos e diretório em / foo / bar / somedir para que você registre a resposta e faça um loop apenas nesses arquivos.
Não tenho certeza de quanto sentido seria definir diretórios como 0775 ( rwxrwxr-x
) e arquivos como 0644 ( rw-r--r--
): diretórios graváveis em grupo, mas não arquivos?
Se você quisesse configurar os arquivos para 0664 ( rw-rw-r--
) para garantir que os arquivos não sejam executáveis enquanto os diretórios são passíveis de uso, existe uma solução elegante envolvendo apenas um comando chmod
:
chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"
Veja como ele pode ser usado em Ansible :
- name: recursive chmod example
command: |
chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
register: chmod_status
changed_when: chmod_status.stdout != ""
with_items:
- "/home/user/sample/dir"
chmod -c
imprime todas as alterações que podemos usar convenientemente para preencher o status "alterado" em Ansible . Espero que faça sentido.
Para alterar apenas mods quando necessário:
- name: make dirs 0755
command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;
- name: make files 0644
command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
Tags ansible file-permissions