■ はじめに
Ansible には Playbook Debugger というPlaybook の実行を途中で止めて、変数の内容を表紙したり変更したりできる機能があります。 これまでは、エラー発生時のみ Debugger を起動させることできたのですが、次期バージョン Ansible 2.5 から、オプションの指定次第で常に Debugger を起動させることができるようになります。
本記事では、Playbookの書き方と動作イメージについてご紹介します。
なお、ansible-playbook コマンドの --step オプションとは別のものです。
■ 環境
インストール
記事執筆時点では 2.5 は beta2 となっています。
ここでは pip で以下のようにインストールします。
pip install git+https://github.com/ansible/ansible.git@stable-2.5
バージョン確認
バージョンが 2.5系 になっていることを確認します。
(ansible25) [vagrant@centos7 vagrant]$ ansible-playbook --version ansible-playbook 2.5.0b2 config file = /etc/ansible/ansible.cfg (略)
■ お試し
Playbook
以下のような Playbook で試します。 ポイントは以下の2箇所です。
strategy: debug今までも利用できた Playbook Debugger を適用するための指定ですdebugger: always2.5 から利用可能な、Debugger を起動させる条件の指定です。alywaysで常に起動。- 他にも
on_failed、on_unreachableなどを指定可能。(詳細:Using the debugger keyword)
- 他にも
- hosts: junos
gather_facts: no
strategy: debug # point1
debugger: always # point2
tasks:
- name: task1
junos_facts:
- name: task2
junos_command:
commands:
- show version
(インベントリファイル、varsファイルは省略します)
実行結果
(1) 通常通り ansible-playbook コマンドで実行します。
(ansible25) [vagrant@centos7 vagrant]$ ansible-playbook -i inventory test.yml PLAY [junos] **************************************************************** TASK [task1] **************************************************************** ok: [172.16.0.1] [172.16.0.1] TASK: task1 (debug)>
このように Debugger が起動し、入力待ち状態になります。
(2) h でヘルプを表示します。
[172.16.0.1] TASK: task1 (debug)> h Documented commands (type help <topic>): ======================================== EOF c continue h help p pprint q quit r redo [172.16.0.1] TASK: task1 (debug)>
このように 入力オプションが表示されます。
(3) c で処理を続けます。
[172.16.0.1] TASK: task1 (debug)> c TASK [task2] ***************************************************************** ok: [172.16.0.1] [172.16.0.1] TASK: task2 (debug)>
このように、 task2 が実行され、入力待ち状態になります。
(4) p でタスク実行結果の内容を表示させます。
[172.16.0.1] TASK: task2 (debug)> p result._result
{'_ansible_no_log': False,
'_ansible_parsed': True,
u'changed': False,
'failed': False,
u'invocation': {u'module_args': {u'commands': [u'show version'],
u'display': None,
u'host': None,
u'interval': 1,
u'match': u'all',
u'password': None,
u'port': None,
u'provider': None,
u'retries': 10,
u'rpcs': None,
u'ssh_keyfile': None,
u'timeout': None,
u'transport': None,
u'username': None,
u'wait_for': None}},
u'stdout': [u'Hostname: vsrx1\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]'],
u'stdout_lines': [[u'Hostname: vsrx1',
u'Model: firefly-perimeter',
u'JUNOS Software Release [12.1X47-D15.4]']]}
[172.16.0.1] TASK: task2 (debug)>
このように、p result._result で、タスク実行結果の各変数が表示されます。
Playbook の中で特に register で明示的に変数に代入していないのもポイントです。
その他、Playbook Debbuger の詳細は使用方法は、公式ドキュメントの「Playbook Debugger」ページをご参照ください。
(5) c で処理を続けます。
[172.16.0.1] TASK: task2 (debug)> c PLAY RECAP ******************************************************************* 172.16.0.1 : ok=2 changed=0 unreachable=0 failed=0 (ansible25) [vagrant@centos7 vagrant]$
すべてのタスクが終了します。
デモ動画
先ほどの実行結果の動画版です。

■ まとめ
エラー時だけでなく、通常時も Debbuger を起動できるようになり、Playbook の開発、デバッグが捗りそうです。
・参考記事