■ はじめに
ansible-playbook
コマンドの実行ログで、OKやスキップの分のタスクを非表示にする機能があります。ansible.cfg
や環境変数で表示、非表示を切り替えます。
- ok なタスクを非表示にする設定
[defaults] display_ok_hosts = no
- スキップしたタスクを非表示にする設定
[defaults] display_skipped_hosts = no
これらは、各種 Callback Plugin に備わっているオプションで、デフォルトの default Callback Pluginでも利用できます。
この記事では、ok なタスク、スキップしたタスクを実行ログに表示させない設定を検証した結果をまとめます。
なお、本機能は以下のツイートで知りました。(Thank You!)
Ansible tip of the day.... if you don't want to display OK tasks (pass) or skipped tasks (conditionals) just add the following to your ansible.cfg file:
— Sean Cavanaugh (@IPvSean) 2019年8月23日
display_ok_hosts = no
display_skipped_hosts = no
- 動作確認環境: Ansible 2.8.4
■ 検証
以下の Playbook で検証します。OK なタスク、スキップされるタスク、failed するタスク(ignore_errors: yes
により処理は続けます)が含まれています。
- display_test.yml
- hosts: localhost gather_facts: no connection: local tasks: - name: OK なタスク1 debug: msg: Hello, Kingyo. - name: OK なタスク2 debug: msg: Hello, Kingyo. - name: スキップされるタスク debug: msg: ここは実行されません when: true == false - name: failed なタスク command: /bin/false ignore_errors: yes - name: OK なタスク3 debug: msg: Hello, Kingyo.
通常(デフォルト)
まずは、通常の状態で検証します。
設定の確認
デフォルトから何も設定が変更されていないことを確認します。
$ ansible-config dump --only-changed $ # 何も表示されないのでデフォルトから変更なし
Playbook 実行
続いて Playbook を実行します。
$ ansible-playbook -i localhost, display_test.yml PLAY [localhost] ********************************************************************************** TASK [OK なタスク1] ******************************************************************************* ok: [localhost] => { "msg": "Hello, Kingyo." } TASK [OK なタスク2] ******************************************************************************* ok: [localhost] => { "msg": "Hello, Kingyo." } TASK [スキップされるタスク] *********************************************************************** skipping: [localhost] TASK [failed なタスク] **************************************************************************** fatal: [localhost]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "cmd": "/bin/false", "msg": "[Errno 2] No such file or directory", "rc": 2} ...ignoring TASK [OK なタスク3] ******************************************************************************* ok: [localhost] => { "msg": "Hello, Kingyo." } PLAY RECAP **************************************************************************************** localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=1
すべてのタスクが表示されました。
OK なタスクを非表示にする(display_ok_hosts = no)
次に、OKなタスクを表示させない設定を検証します。
設定の変更
ansible.cfg
を以下のように設定します。
[defaults] display_ok_hosts = no
$ ansible-config dump --only-changed $ # あれ?
あれれ・・なぜか表示されません。スペルは合っているはずなのですが。
デフォルトからの設定変更の有無に関わらず、表示させてみましたが、そもそも display_ok_hosts
に該当する項目は、ここでは載ってこないようです。
$ ansible-config dump | grep -i display DISPLAY_ARGS_TO_STDOUT(default) = False DISPLAY_SKIPPED_HOSTS(default) = True
とりあえず検証を続けます。
Playbook の実行
Playbook を実行します。
$ ansible-playbook -i localhost, display_test.yml PLAY [localhost] ********************************************************************************** TASK [スキップされるタスク] *********************************************************************** skipping: [localhost] TASK [failed なタスク] **************************************************************************** fatal: [localhost]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "cmd": "/bin/false", "msg": "[Errno 2] No such file or directory", "rc": 2} ...ignoring PLAY RECAP **************************************************************************************** localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=1 (a2840) akiranoMacBook-puro:nwlab akira$
想定通り、OK なタスクが表示されませんでした。
最終行の RECAP では ok も通常通りカウントされ ok=4
となっています。
スキップしたタスクを非表示にする(display_ok_hosts = no)
最後に、スキップしたタスクを表示させない設定を検証します。
設定の変更
ansible.cfg
を以下のように変更します。
[defaults] display_skipped_hosts = no
設定が変更されたことを確認します。
$ ansible-config dump --only-changed DISPLAY_SKIPPED_HOSTS(/Users/akira/ansible/ansible.cfg) = False $
Playbook の実行
Plaubook を実行します。
(a2840) akiranoMacBook-puro:nwlab akira$ ansible-playbook -i localhost, display_test.yml PLAY [localhost] ********************************************************************************** TASK [OK なタスク1] ******************************************************************************* ok: [localhost] => { "msg": "Hello, Kingyo." } TASK [OK なタスク2] ******************************************************************************* ok: [localhost] => { "msg": "Hello, Kingyo." } TASK [failed なタスク] **************************************************************************** fatal: [localhost]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "cmd": "/bin/false", "msg": "[Errno 2] No such file or directory", "rc": 2} ...ignoring TASK [OK なタスク3] ******************************************************************************** ok: [localhost] => { "msg": "Hello, Kingyo." } PLAY RECAP **************************************************************************************** localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=1
スキップされたタスクの実行ログが非表示になりました。OK なタスクは表示されています。 RECAP のカウンタは通常通りです。
■ まとめ
ansible.cfg
の display_ok_hosts
や display_skipped_hosts
によって、ansible-playbook
コマンドの実行ログへの表示、非表示を切り替える機能を検証しました。
何か事情があって、非表示にしたいときは便利だと思います。 ただ、設定していることを忘れてしまうかもしれない点には注意が必要です。