2017-05-11 97 views
0

我有具有包含在它下面任務的ansible劇本:Ansible:檢查是否存在的文件,並將它們複製

- hosts: hosts 
    serial: 1 
    tasks: 
    - include: tasks/webapps.yaml warfiles={{ item }} 
    with_items: 
     - test1.war 
     - test2.war 

和任務文件是:

--- 
    - name: Check war files in release 
    local_action: stat path="/home/ansible/rel/{{ RELEASE }}/webapps/{{ warfiles}}" 
    register: result 
    - name: Copy war files from release 
    synchronize: 
     src: /home/ansible/rel/{{ RELEASE }}/webapps/{{ warfiles }} 
     dest: /destination/ 
     checksum: yes 
     archive: no 
    when: result.stat.exists 

當我運行劇本我得到這個輸出: 任務[檢查發佈中的war文件] ********************************** ************ ok:[1.1.1.1 - > localhost]

TASK [Copy war files from release] ********************************************* 
changed: [1.1.1.1] 
<fcsT...... test1.war 

TASK [Check war files in release] ********************************************** 
ok: [1.1.1.1.1 -> localhost] 

TASK [Copy war files from release] ********************************************* 
changed: [1.1.1.1] 
<fcsT...... test2.war 

所需輸出: 任務[檢查發佈中的war文件] ********************************** ************ OK:1.1.1.1.1 - >本地主機]

TASK [Copy war files from release] ********************************************* 
changed: [1.1.1.1] 
<fcsT...... test1.war 
<fcsT...... test2.war 

我試圖讓劇本首先檢查文件是否存在,後做複製任務,因此它將全部很好地顯示。有沒有辦法做到這一點,而無需另外執行另一項任務。我希望能夠將「register:result」作爲一個數組存儲,如果文件存在,並且在從數組中提取文件之後進行存儲。我對新人來說很陌生。謝謝

回答

0

男人正確使用Stat模塊是這樣: 你錯過了真正的驗證。

--- 
    - name: Check war files in release 
    local_action: stat path="/home/ansible/rel/{{ RELEASE }}/webapps/{{ warfiles}}" 
    register: result 
    - name: Copy war files from release 
    synchronize: 
     src: /home/ansible/rel/{{ RELEASE }}/webapps/{{ warfiles }} 
     dest: /destination/ 
     checksum: yes 
     archive: no 
    when: result.stat.exists == True 
+0

感謝有關統計模塊的提示,但是我期待更多從我如何運行「檢查發佈WAR文件」以數組作爲輸入點和級聯之後,以「複製戰爭文件」碼 – Dusty

0

這可以在一個任務中完成,使用with_filegblob代替。 fileglob查找在本地完成(與local_action相同)。這樣,只有存在的war文件纔會被複制。

- name: Copy war files from release 
    synchronize: 
    src: "{{item}}" 
    dest: /destination/ 
    checksum: yes 
    archive: no 
    with_fileglob: /home/ansible/rel/{{ RELEASE }}/webapps/*.war 
相關問題