Ansible: Como recursivamente definir permissões de diretório e arquivo

35

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?

    
por Edward Ned Harvey 11.01.2016 / 13:08

5 respostas

12
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.

    
por 27.04.2018 / 15:05
17

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

    
por 24.02.2016 / 18:13
9

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.

    
por 15.09.2016 / 15:40
5

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.

    
por 24.10.2016 / 04:05
3

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 {} \;
    
por 07.05.2017 / 22:48