我有Ansible任务来启用和禁用某些主机的Nagios检查。 他们使用“delegate_to”Nagios服务器。 但是,如果有问题的主机处于脱机状态,我无法使用它们,因为Ansible试图通过SSH进入,并在无法通过时将其标记为失败。
由于这个任务实际上并不需要以任何方式联系主机,所以似乎应该有一种方法让Ansible忽略主机并仅与委托进行通信。 这可能吗?
正如一些评论所暗示的,很可能是别的东西导致SSH连接错误,而不是委托任务。 使用delegte_to:
,Ansible只能通过SSH连接到delegate子句中指定的机器(localhost以外的情况)。
我会尝试build议禁用事实( gather_facts: no
),并分享失败的剧本运行的输出。 也可能是由于目标主机closures而导致播放失败的剧本中包含未委托的任务/angular色。
你将需要通过使用例如标签来跳过不可用主机的所有常见任务,禁用事实收集,这将工作。 像这样testing:
test_delegate.yml:
- hosts: unavailable.test gather_facts: false tasks: - command: /bin/stuff - ping: delegate_to: localhost tags: nagios
结果:
$ ansible-playbook -i unavailable.test, -tnagios test_delegate.yml PLAY [unavailable.test] ******************************************************** TASK [ping] ******************************************************************** ok: [unavailable.test -> localhost] PLAY RECAP ********************************************************************* unavailable.test : ok=1 changed=0 unreachable=0 failed=0
本例中的localhost
代表可达主机,在你的情况下是nagios。