■ はじめに
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: always
2.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 の開発、デバッグが捗りそうです。
・参考記事