年中アイス

いろいろつらつら

ansible task内のnotify(handler)の実行タイミング

ansibleのplaybookを作成している時に、若干はまったのでメモ。

こんなplaybookを作っていました。

  • 関連ライブラリストール
  • 設定追加してnotifyを使って再読み込み
  • 確認用にGETリクエストを投げる

干再読み込みに時間がかかるようだったので、wait_forを使って、5秒待って、portを確認するタスクを追加したんですが、設定追加があったにも関わらず、notifyの再読み込みが動作せずに、wait_forが動きだし、その後のGETリクエストももちろん失敗。

あれー?と思ってたんですが、公式をよく読むと、ちゃんと書いてありました。
notifyを書いたタスクが実行されたら、すべてのタスクが終わった後に、handlerが実行され、同じhandlerが呼ばれていたら、複数回ではなく、1回呼ばれます。

Playbooks — Ansible Documentation

These ‘notify’ actions are triggered at the end of each block of tasks in a playbook, and will only be triggered once even if notified by multiple different tasks.

そのタスクが終わった時点でhandlerが実行されるのではなかったです。てっきり、同じような処理をnotifyで関数のように呼び出せるものかと思ってました。