Назад | Перейти на главную страницу

Как я могу запустить делегированную задачу для автономного хоста с помощью Ansible?

У меня есть задачи Ansible для включения и отключения проверки Nagios для некоторых хостов. Они используют "delegate_to" на сервере Nagios. Однако я не могу использовать их, когда рассматриваемый хост отключен, потому что Ansible пытается подключиться по SSH и отмечает, что задача не удалась, когда это невозможно.

Поскольку эта задача на самом деле никоим образом не требует контакта с хостом, кажется, должен быть способ заставить Ansible игнорировать хост и общаться только с делегатом. Это возможно?

Как следует из некоторых комментариев, вероятно, что что-то еще вызывает ошибку соединения SSH, а не делегированная задача. Когда используешь delegte_to:, Ansible подключается только через SSH к машине, указанной в предложении делегата (в случаях, отличных от localhost).

Я бы попробовал предложенное отключение фактов (gather_facts: no), а также поделиться результатами неудачных прогонов плейбука. Также может быть, что в playbook включена неделегированная задача / роль, которая не работает из-за того, что целевой хост не работает.

Вам нужно будет пропустить все обычные задачи недоступного хоста, используя, например, теги, отключите для него сбор фактов, и он заработает. Проверено так:

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.