Ansible:如果任务在一个主机上完成,则继续执行下一个任务

时间:2019-04-17 09:45:01

标签: ansible

在Ansible中,我需要检查两个主机上是否有文件。但是,即使该文件在一个主机上都可用,我也需要取消另一台主机上的任务,然后移至下一个任务。我之所以要求这样做,是因为只有当该特定文件可用并且该文件可以随机写入任何主机时,才能完成下一个任务。

2 个答案:

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

  • 状态: 路径:/ path / to / something 注册:p
  • 调试: msg:“路径存在并且是目录” 时间:定义了p.stat.isdir和p.stat.isdir

https://docs.ansible.com/ansible/latest/modules/stat_module.html了解更多详情