如何共享处理程序?

x-y*_*uri 7 ansible

文档说:

由于处理程序也是任务,因此您还可以包含"处理程序:"部分中的处理程序文件.

我做了什么,playbook.yml:

- hosts: all
  handlers:
    - include: handlers.yml
    # - name: h1
      # debug: msg=h1
  tasks:
    - debug: msg=test
      notify: h1
      changed_when: true
Run Code Online (Sandbox Code Playgroud)

handlers.yml:

- name: h1
  debug: msg=h1
Run Code Online (Sandbox Code Playgroud)

然后,

$ ansible-playbook playbook.yml -i localhost, -k -e ansible_python_interpreter=python2 -v
...
TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "test"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0
...
Run Code Online (Sandbox Code Playgroud)

但是,当我取消注释线条时,我明白了

$ ansible-playbook playbook.yml -i localhost, -k -e ansible_python_interpreter=python2 -v
...
TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "test"
}

RUNNING HANDLER [h1] ***********************************************************
ok: [localhost] => {
    "msg": "h1"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0
...
Run Code Online (Sandbox Code Playgroud)

我跑ansible-2.1.0.0.

我究竟做错了什么?这是我想知道的第一件事.解决方法排在第二位.

UPD

包含也可以在"处理程序"部分中使用,例如,如果要定义如何重新启动apache,则只需对所有playbook执行一次.您可以创建一个看起来像的handlers.yml:

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted
Run Code Online (Sandbox Code Playgroud)

在你的主要剧本文件中,只需将它包含在游戏的底部:

handlers:
  - include: handlers/handlers.yml
Run Code Online (Sandbox Code Playgroud)

Rob*_*oth 9

根据您的游戏规模,更好的解决方案可能是使用角色.Ansible 讨论了为什么角色是一个好主意.

任务进入roles/mystuff/tasks/main.ymlroles/somethingelse/tasks/main.yml.您可以通过创建仅包含处理程序的角色来共享角色之间的处理程序roles/myhandlers/handlers/main.yml,并使两个角色都依赖于myhandlers角色:

roles/mystuff/meta/main.yml并且roles/somethingelse/meta/main.yml:

---

dependencies:
  - myhandlers
Run Code Online (Sandbox Code Playgroud)

有关https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse_roles.html#role-dependencies中依赖关系的更多信息


x-y*_*uri 5

给版主。请仔细阅读我的问题。这就是我的问题的答案。我完全知道 SO 不是一个论坛。

这是中的一个错误ansible-2.1。这要归功于发现问题的udondan 。