Ansible通知另一个angular色的处理程序

我可以通知另一个angular色的处理程序吗? 我该怎么做才能find它?

用例是,例如,我想configuration一些服务,然后重新启动它,如果改变。 不同的操作系统可能有不同的文件来编辑,甚至文件格式可以不同。 所以我想把它们放到不同的angular色中(因为文件格式可以不同,所以不能通过设置group_vars来完成)。 但重启服务的方式是一样的,使用service模块; 所以我想把这个处理程序变成commonangular色。

无论如何要做到这一点? 谢谢。

您也可以调用依赖项angular色的处理程序。 可能比包含文件或在剧本中明确列出angular色更清洁,仅仅是为了angular色到angular色的关系。 例如:

  • angular色/我-处理器/处理器/ main.yml

     --- - name: nginx restart service: > name=nginx state=restarted 
  • angular色/我的,其他/元/ main.yml

     --- dependencies: - role: my-handlers 
  • angular色/我的,其他/任务/ main.yml

     --- - copy: > src=nginx.conf dest=/etc/nginx/ notify: nginx restart 

你应该可以做到这一点,如果你包含处理程序文件。

例:

 handlers: - include: someOtherRole/handlers/main.yml 

但我不认为它的优雅。

一个更优雅的方法是有一个pipe理这两个angular色,如下所示:

 - hosts: all roles: - role1 - role2 

这将使这两个angular色能够调用其他处理程序。

但是我也会build议把它全部放在一个angular色中,并且使用一个条件包含http://docs.ansible.com/playbooks_conditionals.html#conditional-imports

希望有所帮助

我有类似的问题,但需要在其他依赖angular色采取许多行动。

所以,而不是援引handeler – 我们设置一个这样的事实:

 - name: install mylib to virtualenv pip: requirements=/opt/mylib/requirements.txt virtualenv={{ mylib_virtualenv_path }} sudo_user: mylib register: mylib_wheel_upgraded - name: set variable if source code was upgraded set_fact: mylib_source_upgraded: true when: mylib_wheel_upgraded.changed 

然后在其他地方另一个angular色

 - name: restart services if source code was upgraded command: /bin/true notify: restart mylib server when: mylib_source_upgraded