ハンドラがあまりにも仕事なので、あなたも「ハンドラ:」からハンドラファイルを含めることができますセクション。
私は何をすべきか
、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を再起動する方法を定義する場合は、あなただけのプレイブックのすべてに対して一度それを行う必要があり、例えば、「ハンドラ」のセクションで使用することができます含まれてい。ちょうど遊びの下部に、そのようにそれを含め、
--- # this might be in a file like handlers/handlers.yml - name: restart apache service: name=apache state=restarted
そして、あなたのメイン脚本・ファイル内:あなたは次のようになりますhandlers.ymlしたりすることがあります
handlers: - include: handlers/handlers.yml
ハンドラファイルにタスクのコレクションが含まれているため、タスクセクションにハンドラファイルを含めることができます。ハンドラセクションでインクルードを使用できるとは言いません。インクルード自体は(名前のない)ハンドラであり、通知されなかったため何も含まれません。 – udondan
あなたの目標は何ですか?ハンドラはグローバルです。役割間で明示的に共有する必要はありません。ハンドラにロールを含めると、どこからでも通知することができます。 – udondan
更新された質問をご覧ください。目標は私の作戦全体を通してハンドラーを繰り返さないことです。それは複数の演劇を持っています。私はまだ役割がありません。 –