如何使用 Ansible 为离线主机运行委派任务?

如何使用 Ansible 为离线主机运行委派任务?

我有用于启用和禁用 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。

相关内容