如何在ansible中使排除变量动态化

时间:2017-05-22 18:07:55

标签: ansible

我正在尝试制作一个改变所有服务器权限的剧本,但我需要排除一些目录和文件。我试图使文件分配动态,因为你可以看到我已经排除2,但我想使它一般化或动态。 PLZ建议。

以下是我的剧本,请注意我使用的是目录结构:

permission.yml: 
---
- hosts: 127.0.0.1
  roles:
    - { role: fileperm, target_dir: "/tmp/testingpermissions" }
    - { role: fileperm, target_dir: "/tmp/abc" }
    - { role: fileperm, target_dir: "/amp/app/tomcatdefault7055" }


Vars:
main.yml:
  ---
  exclude1: "/tmp/testingpermissions/plugins"
  exclude2: "/tmp/testingpermissions/files"


tasks:
main.yml:
---
- name: Ensure directories are 0755
  command: find {{ target_dir }} -type d ! -path "{{ exclude1 }}*" ! -path "{{ exclude2 }}*" -exec chmod -c 0755 {} \;
  register: chmod_result
  changed_when: "chmod_result.stdout != \"\""

1 个答案:

答案 0 :(得分:0)

您可以使用'file'模块,并遍历需要更改其权限的目录列表, 例如在vars中像这样:

[1, 2, 3, 10, 15]

......然后在任务中这样......:/ / p>

# /vars/main.yml
updatepermissions:
  - "/tmp/testingpermissions"
  - "/tmp/abc"
  - "/amp/app/tomcatdefault7055"

这将仅对您指定的目录设置权限。因此,除了一些被排除在外的人之外,更新权限,你只需要更新一组需要给定权限的目录列表的权限。

对于您不希望从设置权限中排除任何子目录的目录,您可以添加“recurse = yes”。

否则,如果您更喜欢带有“!-path”的命令任务,您可以这样做:

# /tasks/main.yml
- name: Set directory permissions to 0755
  file:
    path: "{{ item }}"
    state: directory
    mode: 0755
  with_items: "{{ updatepermissions }}"

然后在这样的任务中:

# /vars/main.yml
updatepermissions:
  - include: "/tmp/testingpermissions"
    exclude: "! -path \"/tmp/testingpermissions/plugins\" ! -path \"/tmp/testingpermissions/abc\""
  - include: "/some/other/directory"
    exclude: ""