Ansible:如何递归设置目录和文件权限

Ansible:如何递归设置目录和文件权限

在 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 }},并将每个文件或目录的权限更改为指定的权限。

来源:https://stackoverflow.com/a/28782805/1306186

答案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 {} \;

相关内容