はじめに:コールバックプラグインとは
Ansible には コールバックプラグインという仕組みがあり、たとえば json コールバックプラグインを利用すると、ansible-playbook 実行結果の表示は JSON に変更できます。
Ansible 2.5 から null コールバックプラグインが追加されました。 使い所はあまりないかも知れませんが、一応試してみます。(Ansible 2.7.1 で確認)
準備
- Playbook: test.yml
- host: localhost gather_facts: no tasks: - name: debug debug: "Hello"
- 設定ファイル: ansible.cfg
[defaults] stdout_callback = null
設定ファイルの代わりに、環境変数 ANSIBLE_STDOUT_CALLBACK
でも設定可能です。
export ANSIBLE_STDOUT_CALLBACK=null
設定方法の詳細は Ansible Configuration Settings をご参照ください。
実行1: 正常時
$ ansible-playbook -i localhost, nulltest.yml $
本当に何も表示されませんでした。
なお、特にコールバックプラグインを指定しない場合は、以下のようなログになります。
$ ansible-playbook -i localhost, nulltest.yml PLAY [localhost] ************************************************************************************* TASK [debug] ***************************************************************************************** ok: [localhost] => { "msg": "Hello" } PLAY RECAP ******************************************************************************************* localhost : ok=1 changed=0 unreachable=0 failed=0 $
実行2: YAMLシンタックスエラー
設定したのはあくまで標準出力に対するコールバックプラグインなので、エラーは通常通り出力されます。 YAMLのシンタックスエラーの場合は以下のようになりました。
$ ansible-playbook -i localhost, nulltest.yml ERROR! Syntax Error while loading YAML. expected <block end>, but found '?' The error appears to have been in '/vagrant/nulltest.yml': line 7, column 5, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: debug: msg: "Hello" ^ here $
実行3: yum モジュールでのエラー
今度は yum モジュールの name
オプションで、存在しないパッケージ名をした場合です。
以下のように、微妙な出力となりました。
$ ansible-playbook -i localhost, nulltest.yml to retry, use: --limit @/vagrant/nulltest.c $
※補足 retry_files_enabled
をデフォルトのまま (True
) にしているため、エラーが発生したホストに対するリトライファイルが生成されます。
まとめ
標準出力にnull コールバックプラグインを利用すると、正常時は何も表示さないことが確認できました。 何らかの出力を抑制したい場合、シェルレベルで抑制してもよいですが、Ansible の場合はこんな選択肢もあるとだけ覚えておくことにします。