Kan*_* Li 65 ansible ansible-playbook
我可以通过其他角色通知处理程序吗?我该怎么做让ansible找到它?
用例是,例如我想配置一些服务,然后在更改时重新启动它.不同的操作系统可能有不同的文件要编辑,甚至文件格式也可能不同.所以我想把它们放到不同的角色(因为文件格式可能不同,不能通过设置group_vars来完成).但重启服务的方式是相同的,使用service模块; 所以我想把处理程序放到common角色上.
无论如何要实现这一目标?谢谢.
fam*_*kin 68
您还可以调用依赖项角色的处理程序.可能比在文件中包含文件或明确列出角色更简洁,只是为了角色与角色的关系.例如:
角色/我-处理器/处理器/ main.yml
---
- name: nginx restart
service: >
name=nginx
state=restarted
Run Code Online (Sandbox Code Playgroud)角色/我的,其他/元/ main.yml
---
dependencies:
- role: my-handlers
Run Code Online (Sandbox Code Playgroud)角色/我的,其他/任务/ main.yml
---
- copy: >
src=nginx.conf
dest=/etc/nginx/
notify: nginx restart
Run Code Online (Sandbox Code Playgroud)Dom*_*tro 35
如果包含处理程序文件,则应该能够这样做.
例:
handlers:
- include: someOtherRole/handlers/main.yml
Run Code Online (Sandbox Code Playgroud)
但我不认为它优雅.
更优雅的方式是拥有一个管理两个角色的游戏,如下所示:
- hosts: all
roles:
- role1
- role2
Run Code Online (Sandbox Code Playgroud)
这将使两个角色都能够调用其他处理程序.
但我再次建议将其全部放在一个角色和单独的文件中并使用条件包括http://docs.ansible.com/playbooks_conditionals.html#conditional-imports
希望有所帮助
您可以YourRole/handlers/main.yml使用来从文件中导入其他处理程序import_tasks。
因此,如果MyRole需要在some中调用处理程序OtherRole,roles/MyRole/handlers/main.yml将如下所示:
- import_tasks: roles/OtherRole/handlers/main.yml
Run Code Online (Sandbox Code Playgroud)
当然roles/MyRole/handlers/main.yml也可以包括其他处理程序。
这样,如果我要运行MyRole而不从运行任务,则OtherRoleansible将能够从正确导入和运行处理程序OtherRole
| 归档时间: |
|
| 查看次数: |
38893 次 |
| 最近记录: |