Answers:
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes
会将目录设置为755,并将文件设置为644。
Ansible文件/复制模块无法为您提供基于文件类型指定权限的粒度,因此您很可能需要通过以下方式手动执行此操作:
- 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 {} \;
这些将具有递归的作用,
{{ path }}
并将每个文件或目录的权限更改为指定的权限。
recurse
选择,但没有另一个选择。
如果要在ansible中使用模块文件,则可以:
文件:dest = / foo / bar / somedir owner = root group = apache mode = 0644 recurse = yes
文件:dest = / foo / bar / somedir owner = root group = apache mode = 0775
使用此方法,首先将所有文件(recurse = yes)设置为“ 644”,然后将/ foo / bar / somedir设置为“ 775”。
这不是完美的,因为它会在每次播放剧本时更改您的目录权限。但是至少它是幂等的,不像module命令那样。
如果您不想更改状态,可以使用模块状态。它会列出/ foo / bar / somedir中的所有文件和目录,以便您注册答案,然后仅在这些文件上循环。
我不确定将目录设置为0775(rwxrwxr-x
),将文件设置为0644()有多大意义rw-r--r--
:可组写的目录而不是文件?
如果您打算将文件设置为0664(rw-rw-r--
)以确保在目录可遍历时文件不可执行,那么有一种优雅的解决方案仅涉及一个chmod
命令:
chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"
这是如何在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
打印所有我们可以方便地用于在Ansible中填充“已更改”状态的更改。我希望这是有道理的。