如何忽略播放中的连接错误

时间:2019-05-14 08:59:02

标签: ansible

当某些主机无法访问时,我想继续执行剧本以执行其他一些任务。但是,ignore_errors似乎不起作用。调试消息未打印。 ansible版本是2.5.4。在此版本中,有没有办法做到这一点?

- name: check accessibility
  hosts: myhosts
  tasks:
    - ping:
      ignore_errors: yes
    - fail:
        msg: "Host {{ansible_hostname}} is not accessible"
      when: False

1 个答案:

答案 0 :(得分:0)

一种选择是对block中的每个' inventory_hostname '进行ping操作,如果ping操作失败,则结束播放。

- hosts: myhosts
  gather_facts: no
  tasks:
    - block:
        - delegate_to: localhost
          command: ping -c1 "{{ inventory_hostname }}"
      rescue:
       - fail:
           msg: "{{ inventory_hostname }} not accessible. End of play."
    - debug:
        msg: "Host {{ inventory_hostname }} continue play."
    - setup:

注意:

  • 设置' gather_facts:no ',因为我们不确定所有主机都可用
  • 使用“ 库存主机名”,原因是“ 收集事实:否
  • 如有必要,在“ 阻止”之后使用“ 设置”模块

在有可用主机test_01,test_02,test_03和不可用主机test_99的情况下运行剧本会(减少):

TASK [fail] 
fatal: [test_99]: FAILED! => {"changed": false, "msg": "test_99 not accessible. End of play."}
TASK [debug] 
ok: [test_03] => {
    "msg": "Host test_03 continue play."
}
ok: [test_01] => {
    "msg": "Host test_01 continue play."
}
ok: [test_02] => {
    "msg": "Host test_02 continue play."
}
TASK [setup]
ok: [test_03]
ok: [test_01]
ok: [test_02]
PLAY RECAP
test_01                    : ok=3    changed=1    unreachable=0    failed=0   
test_02                    : ok=3    changed=1    unreachable=0    failed=0   
test_03                    : ok=3    changed=1    unreachable=0    failed=0   
test_99                    : ok=0    changed=0    unreachable=0    failed=2