■ はじめに
Ansible には、Playbook 実行時に予めどのような変更がせれるかを、実際に変更を加えることなくチェックできる、check モード (Dry-run)という機能があります。
これまでは、通常実行時も check モード実行時も、実行ログ上は特に変わりはありませんでした。
Ansible 2.9 から、デフォルトのコールバックプラグインに、check モードで実行されたタスクにのログに印を付けられるようになりました。
この記事では、簡単な例をもとにして説明します。
■ 設定
ansible.cfg と環境変数の、2通りの設定方法があります。
ansible.cfg
ansible.cfg で設定する場合は、[defaults] セクションに以下のように指定します。
[defaults] check_mode_markers = yes
環境変数
ansible.cfg で設定する場合は、以下のように指定します。
export ANSIBLE_CHECK_MODE_MARKERS=yes
■ 実行例1: --check オプション付加時
ansible-playbook コマンドに --check オプションを付けて Playbook 全体をチェックモードで実行する場合です。
- Playbook
- hosts: all gather_facts: no tasks: - name: debug test 1 debug: msg: debug test 1 - name: debug test 2 debug: msg: debug test 2
- 実行
$ ansible-playbook -i localhost, check_test.yml --check DRY RUN ********************************************************************************* PLAY [all] [CHECK MODE] ***************************************************************** TASK [debug test 1] [CHECK MODE] ******************************************************** ok: [localhost] => { "msg": "debug test 1" } TASK [debug test 2] [CHECK MODE] ******************************************************** ok: [localhost] => { "msg": "debug test 2" } PLAY RECAP ****************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
冒頭に DRY RUN、各 Play、各タスクに CHECK MODE と表示されました。
■ 実行例2: タスクに check_mode: yes 付加時
タスクに check_mode: yes を付けて、特定のタスクだけチェックモードで実行する場合です。
- Playbook
- hosts: all
gather_facts: no
tasks:
- name: debug test 1
debug:
msg: debug test 1
- name: debug test 2
debug:
msg: debug test 2
check_mode: yes # ポイント
- 実行
$ ansible-playbook -i localhost, check_test.yml PLAY [all] ****************************************************************************** TASK [debug test 1] ********************************************************************* ok: [localhost] => { "msg": "debug test 1" } TASK [debug test 2] [CHECK MODE] ******************************************************** ok: [localhost] => { "msg": "debug test 2" } PLAY RECAP ****************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
check_mode: yes を指定したタスクのみ CHECK MODE と表示されました。
■ 参考: check_mode_markers を有効にしなかった場合
通常はこのようなログになります。
$ ansible-playbook -i localhost, check_test.yml --check PLAY [all] ****************************************************************************** TASK [debug test 1] ********************************************************************* ok: [localhost] => { "msg": "debug test 1" } TASK [debug test 2] ********************************************************************* ok: [localhost] => { "msg": "debug test 2" } PLAY RECAP ****************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
■ まとめ
デフォルトのコールバックプラグインに、check モードで実行されたタスクにのログに印を付ける設定のご紹介をしました。
Playbook 実行ログ上、check モードで実行したことを区別したいときには便利だと思います。