将列表传递到Ansible条件

时间:2017-02-14 14:41:16

标签: ansible

我有一个文件列表,我想要更改模式,但前提是它们存在。我在想我可以使用statwith_item的组合。我对此非常陌生,任何想法都会有很大的帮助。谢谢,约翰

---
 - hosts: all

   tasks:
 - name: checking if file exists
   stat: path={{ item }}
   register: file_exists
   with_items:
    - /tmp/test1
    - /home/john/test2
    - /home/allison/test3

 - name: change permissions
   file: path={{ item }} mode=0600
   when: file_exists.stat.exists

1 个答案:

答案 0 :(得分:1)

您的解决方案应该进行一些修改:

---
  - hosts: localhost
    vars:
      permissioned_files:
        - /tmp/test1.txt
        - /home/john/test2
        - /home/allison/test3
    tasks:
    - name: checking if file exists
      stat: path={{ item }}
      register: file_exists
      with_items: "{{ permissioned_files }}"

    - name: change permissions
      file: path={{ item.0 }} mode=0600
      when: "{{ item.1.stat.exists }}"
      with_together:
        - "{{ permissioned_files }}"
        - "{{ file_exists.results }}"

的变化:

  • 修正缩进
  • 将项目循环添加到第二个任务
  • 使用公共变量而不是重复文件列表
  • 使用parallel loop访问列出的统计结果和必须设置权限的不同文件

更简单的解决方案是使用ignore_errors的{​​{1}}参数和当前功能:当state设置为“file”时(默认情况下),模块将不会创建文件。 ignore_errors表示当任务遇到错误时播放不会失败。

---
- hosts: localhost
  tasks:
    - name: Ensure one sample file exists
      file:
        path: /tmp/test1.txt
        state: touch

    - name: Change permissions
      file:
        path: "{{ item }}"
        mode: 0600
      with_items:
        - /tmp/test1.txt
        - /home/john/test2
        - /home/allison/test3
      ignore_errors: true