ハンドラーはタスクのリストであり、実際には通常のタスクとは異なりません。グローバルに一意の名前で参照され、通知者によって通知されます。何もハンドラに通知しない場合、実行されません。ハンドラーに通知するタスクの数に関係なく、特定のプレイですべてのタスクが完了した後、ハンドラーは1回だけ実行されます。ansible doc
1)同じことを行うハンドラーには同じ名前を付ける必要があります。
restart nginx
常にnginxを再起動しますhandler1
しますhandler2
2)ハンドラーは、セクションにスコープされたプレイ全体の「プレイ」の終わりに実行されます。
3)再起動する必要のあるタスクにregister
とwhen
関数を使用します。この変数は持ち運ぶ必要があります。
コードソース
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "Play 1"
}
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Run if change in task c of role 1] *******************************
changed: [localhost]
TASK [role2 : Always true in role2] ********************************************
changed: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "This is a task in a play"
}
RUNNING HANDLER [role1 : handler] **********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "Play 2"
}
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role1 : Always true in role1] ********************************************
changed: [localhost]
TASK [role2 : Run if change in task c of role 1] *******************************
changed: [localhost]
TASK [role2 : Always true in role2] ********************************************
changed: [localhost]
TASK [debug] *******************************************************************
ok: [localhost] => {
"msg": "This is a task in a play"
}
RUNNING HANDLER [role1 : handler] **********************************************
ok: [localhost] => {
"msg": "This is a handler in role1"
}
PLAY RECAP *********************************************************************
localhost : ok=20 changed=14 unreachable=0 failed=0
同じタスクを実行する多くの方法。ハンドラーは、Webサイト、ssl証明書、およびサービスの再起動が必要な他のタスクを持つnginxサーバーへの複数の変更など、同じプロセスを複数回再起動しないように設計されました。