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

Как уведомить удаленный сервис с помощью Ansible?

Чтобы проверки появлялись в Uchiwa при добавлении нового sensu-клиента, sensu-server и sensu-api необходимо перезапустить. На данный момент есть 5 клиентов и один сервер. Каждый раз, когда новый сенсу-клиент добавляется с использованием анзибля, чеки не появляются в Учиве. На данный момент мне нужно войти на сервер sensu и перезапустить службы. Как это автоматизировать с помощью ansible?

В соответствии с эта документация есть обработчики:

handlers:
    - name: restart memcached
      service: name=memcached state=restarted
      listen: "restart web services"
    - name: restart apache
      service: name=apache state=restarted
      listen: "restart web services" 

который можно вызвать с помощью notify:

tasks:
    - name: restart everything
      command: echo "this task will restart the web services"
      notify: "restart web services"

так что служба будет перезапущена, если произойдет изменение, например, в конфигурации, но как уведомить удаленную службу, например служба уведомлений на IP-B с IP-A?

(listen это новая функция 2.2, которая еще не выпущена на момент написания, поэтому я не буду ее использовать)

Уведомление похоже на обычные задачи (или около того), за исключением того, что оно запускается событием, поэтому в основном вы могли бы сделать что-то в этом роде, это некрасиво (и небезопасно, поскольку машина должна иметь доступ ssh к удаленным серверам), но должно сработать.

handlers:
    - name: restart my remote service
      command: ssh user@myserver -- service restart myservice

Но у Ansible есть более элегантный способ справиться с этим: delegate_to

handlers:
    - name: restart my remote service
      service: name=myserver state=restarted
      delegate_to: myserver

Что он делает, так это то, что задача обработчика будет выполняться на сервере (ах), которому вы делегировали задачу. а затем подключитесь к своей задаче, как вы сказали в вопросе.