Ansible 跳过无法访问的主机

Ansible skip unreachable hosts

您好,我已经编写了一个脚本来 ping 我所有的清单主机。有些在 VPN 服务后面,所以在我可以 ping 它们之前,我设置了一个隧道。

这工作正常,但是如果隧道已设置但 ansible ping 不成功,整个播放就会停止,none 后续任务将被执行(隧道不会关闭/其余任务对于可访问的主机不执行)

如何让播放继续并跳过无法访问的主机?我看过 "meta clear_host_errors" 但事实并非如此。

这是我的脚本

- hosts:
    - liveservers-direct
    - liveservers-special
    - liveservers-keypair
    - testservers-direct
    - testservers-special
    - testservers-keypair
    - intern
  gather_facts: no
  strategy: debug
  become: no
  tasks:
  - name: Ping some servers
    ping:


- hosts:
    - liveservers-vpn
    - testservers-vpn
  strategy: debug
  gather_facts: no
  become: no
  serial: 1
  vars_files:
   - ../roles/vpn/vars/customers.yml
  tasks:
  - include: ../roles/vpn/tasks/connect.yml icao="{{hostvars[inventory_hostname]['icao']}}"
  - ping:
  - name:
    meta: clear_host_errors
  - include: ../roles/vpn/tasks/disconnect.yml icao="{{hostvars[inventory_hostname]['icao']}}"

fatal: [server.behind.vpn]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 10.xx.xx.xx port 22: Connection timed out\r\n", "unreachable": true}

以上错误发生在 "ping" 我如何让它跳过故障并继续处理其余主机?当它到达无法访问的主机时,播放现在就停止了,但还有一些需要检查

删除 serial 关键字确实解决了播放在无法访问的主机上停止的问题。然而,我的 VPN 连接游戏并没有考虑到并行处理,所以我必须改变它。

这将很快在即将发布的 Ansible 2.7 版本中实现,使用 ignore_unreachable 关键字。

查看 2.7 的发行说明 - https://github.com/ansible/ansible/blob/stable-2.7/changelogs/CHANGELOG-v2.7.rst#major-changes

New keyword ignore_unreachable for plays and blocks. Allows ignoring tasks that fail due to unreachable hosts, and check results with is unreachable test.