如何使用 Ansible 通知远程服务?

如何使用 Ansible 通知远程服务?

为了在添加新的 sensu-client 时让检查出现在 Uchiwa 中,需要重新启动sensu-serversensu-api。目前有 5 个客户端和一个服务器。每次使用 ansible 添加新的 sensu-client 时,检查都不会出现在 Uchiwa 中。目前,我需要登录 sensu-server 并重新启动服务。如何使用 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" 

可以使用通知来调用:

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

这样,如果配置发生变化,服务将重新启动,但是如何通知远程服务,例如从 IP-A 通知 IP-B 上的服务?

答案1

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

它的作用是,处理程序任务将在您已委派任务的服务器上执行。然后按照您在问题中所说的那样插入到您的任务中。

相关内容