Ansible:如果任务在一台主机上完成,则转到下一个任务

Ansible:如果任务在一台主机上完成,则转到下一个任务,ansible,Ansible,在ansible中,我需要检查两台主机上是否有可用的文件。但是,如果文件在一台主机上可用,我需要取消另一台主机上的任务,并转到下一个任务。我之所以要求这样做,是因为只有当该特定文件可用并且该文件可以随机写入任何主机时,才能执行下一个任务 下面的剧本正是你想要的: --- - hosts: - server1 - server2 gather_facts: False vars: file_name: 'foo.bar' tasks: - name: wa

在ansible中,我需要检查两台主机上是否有可用的文件。但是,如果文件在一台主机上可用,我需要取消另一台主机上的任务,并转到下一个任务。我之所以要求这样做,是因为只有当该特定文件可用并且该文件可以随机写入任何主机时,才能执行下一个任务

下面的剧本正是你想要的:

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

您可以使用stat模块检查如下状态,也可以在playbook中的hosts:下添加序列:1

  • 统计: 路径:/path/to/something 注册号码:p
  • 调试: msg:“路径存在并且是一个目录” 当:p.stat.isdir已定义且p.stat.isdir

有关更多详细信息

stat模块可用于检查statsHi,感谢您的回答。但是当我尝试调试时,调试任务在一台服务器上失败。此外,我需要的是停止playbook on file checking任务,直到文件在其中一台服务器上可用。这是另一个并行任务的要求,该任务也与我的playbook一起运行。当其他任务仅完成时,我可以继续其余的任务。当该任务完成时,它会将一个文件随机写入其中一个服务器。我试着用wait_for module和stat module完成这项工作,但轮询都没有按我要求的方式运行。增强应答再次感谢。但即使在server1上找到该文件,这仍将在server2上等待30分钟。正如我提到的,如果在一台服务器上找到该文件,我需要立即转到下一个任务。谢谢,这正是我要找的!