Ansible, запускать задачу, если playbook включает роль

Представим себе playbook со следующими ролями: base, мониторинг, nginx и еще один playbook только с base и nginx.

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

Как выполнить задачу, зависящую от наличия другой роли?


person nvartolomei    schedule 17.01.2014    source источник
comment
Не отвечает напрямую на ваш вопрос, но в качестве обходного пути, возможно, сделайте мониторинг частью вашей роли nginx? Вы когда-нибудь захотели бы неконтролируемые серверы?   -  person Mxx    schedule 18.01.2014


Ответы (2)


Хотя мой обходной путь в комментариях мог сработать для вас, я считаю, что это все еще не лучший подход. Он не модульный. Например, в ситуации, когда вы меняете систему мониторинга, вам нужно будет войти в каждую роль и проверить, есть ли в ней компонент мониторинга, и обновить его ... Не самый оптимальный способ.

Возможно, лучше было бы по-прежнему включать отдельную роль мониторинга, но при этом выполнять определенные задачи с использованием условные обозначения playbook. Например, задача мониторинга nginx будет выполнять только when этот сервер является частью вашей группы [веб-серверы]. Или когда для определенной переменной установлено определенное значение или выполняется какое-то другое подходящее условие.

person Mxx    schedule 20.01.2014
comment
Это становится беспорядком - person nvartolomei; 20.01.2014

Можно установить факт с помощью set_fact в роли nginx (set_fact: nginx = True), а затем проверить его в роли мониторинга и выполнить задачу, когда факт определен и истинен (когда: (ansible_facts ['nginx'] определен) и (ansible_facts ['nginx'] == Верно)).

person Albertas    schedule 10.12.2019