はじめに:コールバックプラグインとは
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 の場合はこんな選択肢もあるとだけ覚えておくことにします。