2016-07-04 1 views
1

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を再起動する方法を定義する場合は、あなただけのプレイブックのすべてに対して一度それを行う必要があり、例えば、「ハンドラ」のセクションで使用することができます含まれてい。ちょうど遊びの下部に、そのようにそれを含め、

--- 
# 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 
+0

ハンドラファイルにタスクのコレクションが含まれているため、タスクセクションにハンドラファイルを含めることができます。ハンドラセクションでインクルードを使用できるとは言いません。インクルード自体は(名前のない)ハンドラであり、通知されなかったため何も含まれません。 – udondan

+1

あなたの目標は何ですか?ハンドラはグローバルです。役割間で明示的に共有する必要はありません。ハンドラにロールを含めると、どこからでも通知することができます。 – udondan

+0

更新された質問をご覧ください。目標は私の作戦全体を通してハンドラーを繰り返さないことです。それは複数の演劇を持っています。私はまだ役割がありません。 –

答えて

3

に応じて、あなたの演劇のサイズより良い解決策は役割を使用するかもしれません。無能はsome discussion why roles are a good ideaです。

タスクはroles/mystuff/tasks/main.ymlroles/somethingelse/tasks/main.ymlになります。あなたはroles/myhandlers/handlers/main.ymlのみハンドラを含む役割を作成することによって、ロール間のハンドラを共有し、両方の役割がmyhandlers役割に依存することができます:

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

http://docs.ansible.com/ansible/playbooks_roles.html#role-dependencies

で依存関係
--- 

dependencies: 
    - myhandlers 

詳細

関連する問題