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
答
这可以在一个任务中完成,使用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
感谢有关统计模块的提示,但是我期待更多从我如何运行“检查发布WAR文件”以数组作为输入点和级联之后,以“复制战争文件”码 – Dusty