てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Playbook実行ログにモジュールのオプション値を表示させる設定 DISPLAY_ARGS_TO_STDOUT

はじめに

たまに、Ansible の設定項目一覧を眺めるのですが、結構前からあるけど知らない設定を見つけることがあります。

今回は、DISPLAY_ARGS_TO_STDOUT という設定項目。Playbook の実行ログに、モジュールに与えたオプション値を表示させるもののようです。リファレンスだけみてもまだイメージが沸かなかったので試してみました。

  • 環境
    • ansible-core 2.14.1

設定

この設定を有効化するには、以下の二通りの方法があります。

  • ansible.cfg: [defaults] セクション内の display_args_to_stdout
  • 環境変数: ANSIBLE_DISPLAY_ARGS_TO_STDOUT

デフォルトは False なので無効化されています。

これを今回、ansible.cfg 内で有効化して試します。

[defaults]
display_args_to_stdout = True

Playbook

試す Playbook は以下のとおりです。cisco.ios.ios_interfaces モジュールを利用して、Cisco IOS 機器のインターフェースに description の設定するだけのかんたんなものです。

---
- name: Test play
  hosts: ios01
  gather_facts: false

  vars:
    mydescription: testtest

  tasks:
    - name: Test Configuration
      cisco.ios.ios_interfaces:
        config:
          - name: GigabitEthernet0/1
            description: "{{ mydescription }}"
        state: merged

お試し

それでは実行します。

% ansible-playbook -i inventory.ini ios_set.yml       

PLAY [Test play] **********************************************************************************************************

TASK [Test Configuration config=[{'name': 'GigabitEthernet0/1', 'description': '{{ mydescription }}'}], state=merged] *****
ok: [ios01]

PLAY RECAP ****************************************************************************************************************
ios01                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

上記結果から、Playbook 実行ログの中のタスク名が表示されるところにオプションの値が表示されることが分かりました。

ちなみに、デフォルトの False のときの結果は以下の通り、見慣れた *** です。

% ansible-playbook -i inventory.ini ios_set.yml

PLAY [Test play] **********************************************************************************************************

TASK [Test Configuration] *************************************************************************************************
ok: [ios01]

PLAY RECAP ****************************************************************************************************************
ios01                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

なお、ドキュメントにもある通り、機密情報を含む場合は要注意です。タスクに no_log: true をつけたらデフォルトと同じく、ログに表示されなくなりました。

その他の方法

そういえば、Playook の実行ログにモジュールのオプションの値を表示する方法は他にもありました。

ansible-playbook コマンドの -vvv オプションです。比較のために、DISPLAY_ARGS_TO_STDOUT の設定をデフォルト(False)に戻したうえで、-vvv をつけて実行した結果を掲載します。

% ansible-playbook -i inventory.ini ios_set.yml -vvv
...(略)...

TASK [Test Configuration] *************************************************************************************************
task path: /Users/sakana/ansible/ios_set.yml:22
ok: [ios01] => {
    ...(略)...
    "invocation": {
        "module_args": {
            "config": [
                {
                    "description": "testtest!",
                    "duplex": null,
                    "enabled": true,
                    "mtu": null,
                    "name": "GigabitEthernet0/1",
                    "speed": null
                }
            ],
            "running_config": null,
            "state": "merged"
        }
    }
}

PLAY RECAP ****************************************************************************************************************
ios01                      : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

上記の通り、module_args 配下にオプションの値が表示されました。Playbook 内では明示的な指定をしていない enabled: true のようなデフォルト値も表示されています。他、変数 mydescription の値も展開され "description": "testtest!" と表示されています。

DISPLAY_ARGS_TO_STDOUT を有効化したときとの比較は以下のとおりです。

方法 変数展開 デフォルト値 利用シーン
DISPLAY_ARGS_TO_STDOUT 有効化 展開されない 表示されない ちょっとした確認
-vvv 展開される 表示される デバッグ

総じて、DISPLAY_ARGS_TO_STDOUT 有効化の方は、最低限というかスッキリしている感じです。

一方 -vvv は、Playbook では指定していない、モジュールのデフォルト値や、変数値の展開もされます。特に変数値の展開は Playbook を見てもパッと見ではわからないので -vvv ならではの点であり、デバッグ要素が強いと感じています。

まとめ

Playbook実行ログにモジュールのオプション値を表示させるオプション DISPLAY_ARGS_TO_STDOUT を試してみました。

この手の、オプションの指定値をログに表示させる方法は、Playbook の中身を見るのがちょっと手間なときに有効かなと思います。

たとえば、Automation Controller には直接 Playbook の内容を表示する方法はないので、この手の機能を有効化してジョブテンプレートを実行するとオプションの値が見えるはずなので便利かもしれません。