【发布时间】:2018-06-07 22:29:42
【问题描述】:
您好,我已经编写了一个脚本来 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]:无法访问! => {"changed": false, "msg": "无法通过 ssh 连接到主机:ssh: 连接到主机 10.xx.xx.xx 端口 22: 连接超时\r\n", "无法访问" : 真的}
在“ping”时发生上述错误我如何让它跳过失败并继续使用其余主机?当播放到达无法访问的主机时,播放现在停止,但需要检查更多
【问题讨论】:
-
为什么是
serial: 1? -
认为将VPN后面的服务器一个一个做起来会更稳定。 (这些并不多)
-
如何通过删除来解决您的问题?
-
不起作用,它只是打开了一个通往第一台主机的隧道,而所有其他隧道都失败了。事情变得更糟
-
我认为你的问题源于你如何组织你的戏剧。你有一个完整的游戏连接到 vpn、ping 和断开连接,所以如果这个游戏失败,它将不会继续下一个游戏。当一个剧本失败时,它会使整个剧本停止。我会研究使用
when将这两个非常相似的游戏组合成一个游戏来区分主机(或真正的组)特定任务。
标签: python error-handling ansible ping