您好我已经编写了一个脚本来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:connect to host 10.xx.xx.xx port 22:Connection超时\ r \ n","无法到达":true}
以上错误发生在" ping"如何让它跳过失败并继续其他主机?当游戏到达无法到达的主机时,游戏就会停止,但还需要检查一些
答案 0 :(得分:6)
在即将到来的2.7版本的Ansible中,使用ignore_unreachable
关键字将很快实现这一点。
请参阅2.7的发行说明-https://github.com/ansible/ansible/blob/stable-2.7/changelogs/CHANGELOG-v2.7.rst#major-changes
用于播放和屏蔽的新关键字
ignore_unreachable
。允许忽略由于主机不可达而失败的任务,并使用不可达的测试检查结果。
答案 1 :(得分:-2)
您可以尝试使用ignore_errors: yes
。无论原因是什么,它都会忽略任何错误,并且它将继续执行其余任务。
价: http://docs.ansible.com/ansible/latest/playbooks_error_handling.html
答案 2 :(得分:-2)
删除serial关键字确实解决了在无法访问的主机上暂停播放的问题。但是我的VPN连接游戏并没有考虑到并行处理,所以我不得不改变它。