てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Ansible] 実行ログに OK やスキップしたタスクを表示しないようにする (display_ok_hosts / display_skipped_hosts)

■ はじめに

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 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.cfgdisplay_ok_hostsdisplay_skipped_hosts によって、ansible-playbook コマンドの実行ログへの表示、非表示を切り替える機能を検証しました。

何か事情があって、非表示にしたいときは便利だと思います。 ただ、設定していることを忘れてしまうかもしれない点には注意が必要です。