Ansible跳过无法访问的主机

时间:2017-12-27 09:19:54

标签: python error-handling ansible ping

您好我已经编写了一个脚本来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"如何让它跳过失败并继续其他主机?当游戏到达无法到达的主机时,游戏就会停止,但还需要检查一些

3 个答案:

答案 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连接游戏并没有考虑到并行处理,所以我不得不改变它。