# Playbook ansible permisos

**URL:** <https://forum.ansible.com/t/playbook-ansible-permisos/6258>\
**Category:** Get Help\
**Created:** [June 9, 2024, 6:19am UTC](https://forum.ansible.com/t/playbook-ansible-permisos/6258 "2024-06-09T06:19:27Z")\
**Posts on this page:** 1\
**Showing post:** 12

<div class="post-metadata">

**Author:** ![utoddl](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/utoddl/32/249_2.png) [@utoddl](https://forum.ansible.com/u/utoddl)\
**Post date:** [June 10, 2024, 11:25pm UTC](https://forum.ansible.com/t/playbook-ansible-permisos/6258/12 "2024-06-10T23:25:30Z")

</div>

Okay, here’s an even shorter version that loads the list of files and directories from a file.

The `grep` in the first task skips blank lines and lines where the first non-space character is a pound sign (`#`), so you can put in comments and some white-space to help manage the file.

There’s a commented-out one-line quick-n-dirty `debug` task in case you want to see how the registered output from the `stat` module is structured.

This version dispenses with the `set_fact` steps, instead looping over `paths_stats` filtered to include just the directory names or file names relevant to your target host.

Change the value of “`paths_to_fix_filename`” to point to your file of file and directory names. You might want to experiment with a very small subset of files – five or six maybe – on a very small subset of target hosts (1?) until you’re comfortable with what it’s doing.

The biggest question in the “what it’s doing” category is about the “`recurse: true`” on the “Fix mode of existing directories” task. That’s a mighty big hammer for a guy with only two thumbs, so be careful.

```yaml
---
# file-mode-fix.yml
- name: File mode parameter
  hosts: localhost # ← Use whatever is appropriate here
  gather_facts: false
  vars:
    paths_to_fix_filename: file-mode-fix-interesting_files.txt

  tasks:
    - name: Load interesting_files
      ansible.builtin.command:
        grep -v -E '^ *(#.*)?$' "{{ paths_to_fix_filename }}"
      changed_when: false
      register: paths_to_fix

    - name: Stat paths_to_fix
      ansible.builtin.stat:
        path: '{{ item }}'
      loop: '{{ paths_to_fix.stdout_lines }}'
      register: paths_stats

# - debug: msg='{{ paths_stats }}'

    - name: Fix mode of existing directories
      ansible.builtin.file:
        path: '{{ item }}'
        mode: 'o-rwx' # or however you want to change directory modes
        state: directory
        recurse: true # or false if you don't want to do this to all sub-directories
      loop: '{{ paths_stats.results
                | selectattr("stat.exists")
                | selectattr("stat.isdir")
                | map(attribute="stat.path") }}'

    - name: Fix mode of existing files
      ansible.builtin.file:
        path: '{{ item }}'
        mode: 'o-rwx' # or however you want to change file modes
        state: file
      loop: '{{ paths_stats.results
                | selectattr("stat.exists")
                | selectattr("stat.isreg")
                | map(attribute="stat.path") }}'

```

---

_[View the full topic](https://forum.ansible.com/t/playbook-ansible-permisos/6258)._
