如何在目录中执行递归以避免重叠

时间:2019-04-27 09:16:04

标签: salt-stack

使用SaltStack状态,我试图以递归方式设置文件和目录的权限,

我的文件结构如下:

  • / dir1 / file1
  • / dir1 / file2_untouch
  • / dir1 / dir2 / file3
  • / dir1 / dir2 / file4_untouch
  • / dir1 / dir3 / file5
  • / dir1 / dir3 / file6

在以下状态下,几乎所有(排除除外)都可以正确执行,但每次执行时出现相同的重叠,因为设置了 / dir1 0644和 / dir1 / dir3 再次设置0755。

config_dirs:
  file.directory:
    - user: user1
    - group: user1
    - dir_mode: '0755'
    - exclude_pat: file*_untouch
    - recurse:
      - user
      - group
      - mode
    - names:
      - /dir1:
        - file_mode: '0644'
      - /dir1/dir3:
        - file_mode: '0755'

我想要这个结果:

  • / dir1 / dir3 ;
  • 中的每个文件设置权限0644
  • 使用模式 file * _untouch ;
  • 保留文件不变
  • 为其他所有文件设置权限0644;
  • 将权限0755设置为其他所有目录;

1 个答案:

答案 0 :(得分:0)

exclude_pat的{​​{1}}选项仅适用于clean功能。 实际上,file.directory状态模块仅将file.directory用作辅助工作和isn't very good at it

要以有状态的方式实现所需的chmod/chown动作,您可以解决chmod/chown的限制,如下所示:

file.directory

如果这太“ hacky”,则应考虑为其编写一个简单的自定义模块。 config_dirs_dir_ownerships: cmd.run: - name: "find /dir1 -type d -exec chmod 755 {} \\; -exec chown user1:user1 {} \\;" - onlyif: "find /dir1 -type d -not \\( -perm 755 -a -user user1 -a group user1 \\) |grep ." config_dirs_file_ownerships: cmd.run: - name: "find /dir1 -type f -not -name 'file*_untouch' -exec chmod 644 {} \\; -exec chown user1:user1 {} \\;" - onlyif: "find /dir1 -type f -not -name 'file*_untouch' -not \\( -perm 644 -a -user user1 -group user1 \\) |grep ." 应该可以胜任,而且实施起来并不难。自定义模块的下一个最佳文档:https://pyholodeck.readthedocs.io/en/latest/first_module.html