在 ansible 中,我可以这样做:
file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes
它会递归地将该路径中所有目录和文件的所有者、组和权限设置为 0775。但我想将目录设置为 0775,将文件设置为 0664。有什么方法可以让 ansible 做到这一点吗?
答案1
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes
将目录设置为 755,将文件设置为 644。
答案2
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 }}
,并将每个文件或目录的权限更改为指定的权限。
答案3
如果你想要在ansible中使用模块文件,你可以:
文件:dest=/foo/bar/somedir 所有者=root 组=apache 模式=0644 递归=yes
文件:dest=/foo/bar/somedir 所有者=root 组=apache 模式=0775
使用此方法,首先将所有文件(recurse=yes)设置为“644”,然后将 /foo/bar/somedir 设置为“775”。
这并不完美,因为每次你运行剧本时它都会改变你的目录权限。但至少它是幂等的,不像模块命令。
如果您不想有“已更改”状态,则可以使用模块 stat。它将列出 /foo/bar/somedir 中的所有文件和目录,以便您注册答案,然后仅对这些文件进行循环。
答案4
仅在需要时更改模式:
- 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 {} \;