公式情報 : Callback Plugins
以下のようなことができる
- 通常の出力に実行時間などの追加情報をいれる
- 通常の出力形式をjson等に変更する
- 自分でpluginを作ってやりたい放題する
- 出力をslackやmailに流す
以下、1, 2, 3を試す。
1. 通常の出力に実行時間などの追加情報をいれる
実行にかかった時間を出力してみる
ansible.cfgにcallback_whitelist = timer
を追加
出力
~snip~ Playbook run took 0 days, 0 hours, 0 minutes, 4 seconds
2. 通常の出力形式をjson等に変更する
出力形式をjsonに変更してみる
ansible.cfgにstdout_callback = json
を追加
出力
~snip~ "stats": { "192.168.33.12": { "changed": 0, "failures": 0, "ok": 2, "skipped": 0, "unreachable": 0 } } }
3. 自分でpluginを作ってやりたい放題する
公式ページCallback Plugins
を参考にcallback_plugins
というフォルダを作り、その中にpythonでコードを記述していきます。
書き方等はドキュメントを探すよりも実際のコードを見たほうが早いと思います。
今回は、playbookを実行時にplaybook名を出力してみます。
ansible.cftにcallback_whitelist = save2file
を追記の上、以下のファイルを作成する
callback_plugins/save2file.py
import os from ansible.module_utils.urls import open_url from ansible.plugins.callback import CallbackBase class CallbackModule(CallbackBase): CALLBACK_VERSION = 2.0 CALLBACK_TYPE = 'notification' CALLBACK_NAME = 'save2file' CALLBACK_NEEDS_WHITELIST = True def __init__(self, display=None): super(CallbackModule, self).__init__(display=display) self.playbook_name = None def v2_playbook_on_start(self, playbook): self.playbook_name = os.path.basename(playbook._file_name) print(self.playbook_name)
出力
host1.yml ← playbook名 PLAY [host1] ******************************************************************* TASK [Gathering Facts] ********************************************************* ~snip~
期待通りの出力になっています。
v2_playbook_on_startのほかにも関数はあるので既存のコードを参考にいろいろ試してみると面白いかもしれません。