我有用于启用和禁用 Nagios 检查某些主机的 Ansible 任务。它们使用“delegate_to”Nagios 服务器。但是,当相关主机处于离线状态时,我无法使用它们,因为 Ansible 会尝试通过 SSH 连接,如果无法连接,则会将任务标记为失败。
由于此任务实际上不需要以任何方式联系主机,因此似乎应该有一种方法可以让 Ansible 忽略主机并仅与委托人通信。这可能吗?
答案1
正如一些评论所暗示的那样,很可能是其他原因而不是委派的任务导致了 SSH 连接错误。使用时delegte_to:
,Ansible 仅通过 SSH 连接到委托子句中指示的计算机(在 localhost 以外的情况下)。
我会尝试建议的禁用事实(gather_facts: no
)并分享您失败的剧本运行的输出。也可能是剧本中包含一个非委派任务/角色,由于目标主机关闭而导致剧本失败。
答案2
您需要使用 eg 标签跳过不可用主机的所有常规任务,禁用事实收集,它就会起作用。测试如下:
测试委托.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。