Ansible:检查是否存在的文件,并将它们复制

问题描述:

我有具有包含在它下面任务的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”作为一个数组存储,如果文件存在,并且在从数组中提取文件之后进行存储。我对新人来说很陌生。谢谢

男人正确使用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

这可以在一个任务中完成,使用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