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.
您好,我已经编写了一个脚本来 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.