如何共享处理程序?

时间:2016-07-04 16:05:28

标签: ansible

The docs说:

  

由于处理程序也是任务,因此您还可以在“处理程序:”部分中包含处理程序文件。

我做了什么,playbook.yml

- hosts: all
  handlers:
    - include: handlers.yml
    # - name: h1
      # debug: msg=h1
  tasks:
    - debug: msg=test
      notify: h1
      changed_when: true

handlers.yml

- name: h1
  debug: msg=h1

然后,

$ 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
...

但是当我取消注释这些线条时,我看到了

$ 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
...

我正在运行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
     

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

handlers:
  - include: handlers/handlers.yml

2 个答案:

答案 0 :(得分:7)

根据播放的大小,更好的解决方案可能是使用角色。 Ansible有some discussion why roles are a good idea

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

roles/mystuff/meta/main.ymlroles/somethingelse/meta/main.yml

---

dependencies:
  - myhandlers

有关https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse_roles.html#role-dependencies

中依赖项的更多信息

答案 1 :(得分:1)

致版主。请仔细阅读我的问题。这就是我的问题的答案。而且我完全清楚SO不是论坛。

ansible-2.1中的a bug。信用额归udondan发现问题。