У меня есть задачи 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.