您好我已经编写了一个脚本来ping我的所有库存主机。有些人支持VPN服务,因此在我可以ping通之前,我建立了一个隧道。
这样可以正常工作,但是如果设置隧道但是ansible ping没有成功则整个播放都会暂停,并且后续任务都不会执行(隧道不会关闭/可访问的主机的其余任务不会被执行)
如何继续播放并跳过无法访问的主机?我看过“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']}}"
致命:[server.behind.vpn]:无法访问! => {“已更改”:false,“msg”:“无法通过ssh连接到主机:ssh:连接到主机10.xx.xx.xx端口22:连接超时\ r \ n”,“无法访问” :true}
上面的错误发生在“ping”如何让它跳过失败并继续与其他主机?当游戏到达无法到达的主机时,游戏就会停止,但还需要检查一些游戏
这将很快在即将发布的Ansible 2.7版本中使用ignore_unreachable
关键字。
请参阅2.7 - https://github.com/ansible/ansible/blob/stable-2.7/changelogs/CHANGELOG-v2.7.rst#major-changes的发行说明
播放和块的新关键字
ignore_unreachable
。允许忽略由于无法访问的主机而导致失败的任务,并检查无法访问的测试结果。
你可以尝试使用ignore_errors: yes
。无论原因是什么,它都会忽略任何错误,并且它将继续执行其余任务。
参考:http://docs.ansible.com/ansible/latest/playbooks_error_handling.html
删除串行关键字确实解决了在无法访问的主机上暂停播放的问题。但是我的VPN连接播放并没有考虑并行处理,所以我必须改变它。