2017-02-14 60 views
0

我有一個文件的列表,我想改變模式,但只有當它們存在。我在想我可以使用statwith_item的組合。我對此很新,任何想法都會非常有幫助。謝謝,約翰傳遞列表到Ansible有條件

--- 
- 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

您的解決方案應該有一些修改工作:

--- 
    - 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參數和Ansible file module的電流能力的不同的文件:當狀態設置爲「文件」 (因爲它是默認的),模塊不會創建文件。 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 
+0

謝謝,它的作品就像一個魅力! –