在Ansible中,我需要检查两个主机上是否有文件。但是,即使该文件在一个主机上都可用,我也需要取消另一台主机上的任务,然后移至下一个任务。我之所以要求这样做,是因为只有当该特定文件可用并且该文件可以随机写入任何主机时,才能完成下一个任务。
答案 0 :(得分:0)
以下剧本完全符合您的要求:
---
- hosts:
- server1
- server2
gather_facts: False
vars:
file_name: 'foo.bar'
tasks:
- name: wait for file
wait_for:
path: '{{ file_name }}'
state: present
timeout: 30
ignore_errors: True
- name: stat
stat:
path: '{{ file_name }}'
register: result
- name: next
debug:
msg: "File {{ file_name }} available on {{ ansible_host }}"
when: result.stat.isreg is defined and result.stat.isreg
输出为:
PLAY [server1,server2] *********************************************************
TASK [wait for file] ***********************************************************
ok: [server1]
fatal: [server2]: FAILED! => {"changed": false, "elapsed": 3, "msg": "Timeout when waiting for file foo.bar"}
...ignoring
TASK [stat] ********************************************************************
ok: [server1]
ok: [server2]
TASK [next] ********************************************************************
skipping: [server2]
ok: [server1] => {
"msg": "File foo.bar available on server1"
}
PLAY RECAP *********************************************************************
server1 : ok=3 changed=0 unreachable=0 failed=0
server2 : ok=0 changed=0 unreachable=0 failed=0
答案 1 :(得分:0)
您可以使用stat模块检查状态,如下所示,也可以在剧本中的主机:下面添加序列号:1
https://docs.ansible.com/ansible/latest/modules/stat_module.html了解更多详情