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
答案 0 :(得分:7)
根据播放的大小,更好的解决方案可能是使用角色。 Ansible有some discussion why roles are a good idea。
任务进入roles/mystuff/tasks/main.yml
和roles/somethingelse/tasks/main.yml
。您可以通过创建仅包含处理程序roles/myhandlers/handlers/main.yml
的角色和使两个角色都依赖于myhandler角色来共享角色之间的处理程序:
roles/mystuff/meta/main.yml
和roles/somethingelse/meta/main.yml
:
---
dependencies:
- myhandlers
有关https://docs.ansible.com/ansible/2.5/user_guide/playbooks_reuse_roles.html#role-dependencies
中依赖项的更多信息答案 1 :(得分:1)