首页 > 解决方案 > Ansible 递归设置目录权限

问题描述

我正在尝试为列表中的目录设置权限。下面是一个示例列表,我希望dirAdirB和获得许可。dirCdirDo-w

"__cronjob_paths": [
        "/dirA/dirB",
        "/dirC/dirD",
    ] 

file模块有recursive选项,但它也设置目录中文件的权限,所以它不是一个选项。

正则表达式或过滤器是解决此问题的最佳方法吗?也许过滤掉/并将目录保存到另一个列表中,我可以循环访问并设置权限?

我还需要记住,系统中可能有其他目录具有与列表中的目录同名的目录(不应该得到o-w

标签: ansible

解决方案


创建子目录和索引的列表,例如

    - set_fact:
        _paths: "{{ _paths|d([]) + [{'dir': _dir, 'idx': _idx}] }}"
      loop: "{{ __cronjob_paths }}"
      vars:
        _dir: "{{ item.split('/')|select() }}"
        _idx: "{{ range(1, _dir|length + 1) }}"

  _paths:
  - dir:
    - dirA
    - dirB
    idx:
    - 1
    - 2
  - dir:
    - dirC
    - dirD
    idx:
    - 1
    - 2

现在,您可以迭代idx子元素并加入子目录,例如

    - debug:
        msg: "chmod o-w /{{ item.0.dir[:item.1]|join('/') }}"
      with_subelements:
        - "{{ _paths }}"
        - idx

  msg: chmod o-w /dirA
  msg: chmod o-w /dirA/dirB
  msg: chmod o-w /dirC
  msg: chmod o-w /dirC/dirD

如果这是您想要的,请继续使用命令文件模块。


推荐阅读