notifyとhandler編Tweet前回はPlaybookの分割に挑戦しました。今回は特定のタスクが完了した場合に後続処理を定義する方法についてまとめます。handler後続処理を実行する各タスクに記述することができるnotifyを利用すると、特定のタスクが終了したタイミングで、handlers内に定義された後続のタスクを自動的に実行してくれます。notifyは「通知する」という意味の英単語です。startedご覧の通りnameに半角スペースが入っていても大丈夫です。気持ち悪い場合はアンダーバー(_)をつけたりキャメルケース(startApache)といった感じで書いても良いかもしれません。notifyが配列になっているところからも分かる通り、複数のハンドラーを同時に指定することも可能です。同じハンドラーの呼び出しは1回にまとめられる特に意味のない例ですが、以下のPlaybookを実行するとansible.logには3行の日付が記録されていることを期待しますが、実際には1つにまとめられます。ansible.logご覧の通りです。1行だけしか記録されていません。JSTなぜこのようなことになるかと言うと、notify/handlerはまとめて最後に実行されるからのようです。これはあえての仕様で、重複して処理を行う方を防ぐ目的でこのような動作になっているようです。ハンドラーはタスクがchangedのときだけ実行されるこれも知らないとハマりそうなところです。以下のPlaybookを2回目に実行するとどういう挙動になるか考えてみます。ansible.logslコマンドはすでにインストールされており、yumモジュールのstateにはpresentが指定されているためこのタスクは通常何も実行しません。ここで注目すべきはnotifyです。結論から言うとここでもhandlerは何も実行されません。notifyは何らかの処理が実行された場合にのみ、つまり実行結果がchangedになった場合にだけ通知されるのです。言うと、Playbook実行中にエラーが発生した場合、それまで正常終了していたタスクのハンドラー分もあわせてすべて実行されません。notify/handlerは最後にまとめて実行されるからです。date1は正常終了しているので実行されるかに見えますが実際には実行されません。いつもサーバに忍ばせています。動画は2倍速にしてありますが実際にはもっとゆっくり通過するため、急いでるときだと殺意の波動に目覚めそうになりますのでご注意くださいwハンドラーをエラー発生時でも実行する実行時にエラーが発生するとすべてのハンドラーが実行されないのは納得がいかない、成功したタスクの分だけでも実行したいという場合には、公式ドキュメントに記載されている手段を利用します。unreachable.)適当に日本語訳すると、以下の通り。Trueを追加しました。ansible2.log実行すると最初にハンドラーだけ無事に実行されていますね。管理対象のサーバを確認するとちゃんと最初のログファイルだけ生成されているのがわかります。template編https://blog.katsubemakito.net/ansible/ansible-1st-4前回はタスクが終了した際に後続処理を実行する方法についてご紹介しました。今回は設定ファイルなどをローカルから管理対象のサーバへコピーする際に、単純なコピーではなくもう少し複雑なことができる「テンプレート」について取り上げます。自宅警備がてらゲームのお仕事や講師などしてご飯を食べてます。ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。コメントデータの処理方法の詳細はこちらをご覧ください。ブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。