Ansible 中的全局处理程序

Pet*_*kee 6 ansible

是否有可能在 Ansible 中拥有真正的全局处理程序,以便我可以从任何剧本的任何角色的任何任务“通知”处理程序?并且没有明确导入。

我只想定义一个处理程序(比如“重新启动 httpd”),并让它可用于任何“通知”指令的任何地方。

谢谢!

Zor*_*che 5

您可以在游戏中而不是角色中定义处理程序。戏剧中定义的处理程序可用于该戏剧下的所有任务/角色。

如果您也想在处理程序部分中使用导入,则可以使用导入。

---
- hosts: all
  handlers:
  - import_tasks: global_handlers.yml
  tasks:
  - shell: echo "Hello World"
    notify: some thing from global_handlers
Run Code Online (Sandbox Code Playgroud)

请注意,您需要一个“静态包含”(根据 https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change),因此import_tasks必须使用而不是include_tasks

您无法通知包含内部定义的处理程序。从 Ansible 2.1 开始,这确实有效,但包含必须是静态的。