Playbook デバッガー¶
トピック
Ansible には、ストラテジープラグインの一部としてデバッガーが含まれています。このデバッガーを使用すると、タスクをデバッグできます。 タスクのコンテキストで、デバッガーのすべての機能にアクセスできます。 たとえば、変数の値を確認または設定したり、モジュール引数を更新したり、新しい変数や引数でタスクを再実行して障害の原因を解決したりできます。
デバッガーを呼び出す方法は複数あります。
デバッガーキーワードの使用¶
New in version 2.5.
debugger
キーワードは、プレイ、ロール、ブロック、タスクなどの name
属性を指定するブロックで使用できます。
debugger
キーワードは、いくつかの値を受け入れます。
- always
- 結果に関係なく、常にデバッガーを呼び出します。
- never
- 結果に関係なく、デバッガーを呼び出しません。
- on_failed
- タスクが失敗した場合に限りデバッガーを呼び出します。
- on_unreachable
- ホストが到達できない場合に限りデバッガーを呼び出します。
- on_skipped
- タスクがスキップされた場合に限りデバッガーを呼び出します。
これらのオプションは、デバッガーを有効または無効にするグローバル設定を上書きします。
設定または環境変数¶
New in version 2.5.
ansible.cfg では、以下のようになります。
[defaults] enable_task_debugger = True
環境変数では、以下のようになります。
ANSIBLE_ENABLE_TASK_DEBUGGER=True ansible-playbook -i hosts site.yml
この方法を使用すると、特に明示的に無効になっていない限り、 失敗したタスクまたは到達できないタスクによりデバッガーが呼び出されます。
ストラテジーとして¶
Note
これは、2.5 より前の Ansible バージョンに一致する後方互換性があり、 今後のリリースで削除される可能性があります。
デバッグ
ストラテジーを使用するには、以下のような ストラテジー
属性を変更します。
- hosts: test strategy: debug tasks: …
コードを変更しない場合は、
デバッガーを有効にしたり、以下のように ansible.cfg
を変更したりするために ANSIBLE_STRATEGY=debug
環境変数を定義できます。
[defaults] strategy = debug
例¶
たとえば、以下のように Playbook を実行します。
hosts: test debugger: on_failed gather_facts: no vars:
var1: value1
- tasks:
- name: wrong variable ping: data={{ wrong_var }}
wrong_var 変数が定義されていないため、デバッガーが呼び出されます。
モジュールの引数を変更して、タスクを再実行します。
PLAY ***************************************************************************
TASK [wrong variable] **********************************************************
fatal: [192.0.2.10]: FAILED! => {"failed": true, "msg": "ERROR! 'wrong_var' is undefined"}
Debugger invoked
[192.0.2.10] TASK: wrong variable (debug)> p result._result
{'failed': True,
'msg': 'The task includes an option with an undefined variable. The error '
"was: 'wrong_var' is undefined\n"
'\n'
'The error appears to have been in '
"'playbooks/debugger.yml': line 7, "
'column 7, but may\n'
'be elsewhere in the file depending on the exact syntax problem.\n'
'\n'
'The offending line appears to be:\n'
'\n'
' tasks:\n'
' - name: wrong variable\n'
' ^ here\n'}
[192.0.2.10] TASK: wrong variable (debug)> p task.args
{u'data': u'{{ wrong_var }}'}
[192.0.2.10] TASK: wrong variable (debug)> task.args['data'] = '{{ var1 }}'
[192.0.2.10] TASK: wrong variable (debug)> p task.args
{u'data': '{{ var1 }}'}
[192.0.2.10] TASK: wrong variable (debug)> redo
ok: [192.0.2.10]
PLAY RECAP *********************************************************************
192.0.2.10 : ok=1 changed=0 unreachable=0 failed=0
今回は、タスクが正常に実行します。
利用可能なコマンド¶
p(print) task/task_vars/host/result¶
モジュールの実行に使用される値を出力します。
[192.0.2.10] TASK: install package (debug)> p task TASK: install package [192.0.2.10] TASK: install package (debug)> p task.args {u’name’: u’{{ pkg_name }}’} [192.0.2.10] TASK: install package (debug)> p task_vars {u’ansible_all_ipv4_addresses’: [u’192.0.2.10’],
u’ansible_architecture’: u’x86_64’, …} [192.0.2.10] TASK: install package (debug)> p task_vars[‘pkg_name’] u’bash’ [192.0.2.10] TASK: install package (debug)> p host 192.0.2.10 [192.0.2.10] TASK: install package (debug)> p result._result {‘_ansible_no_log’: False,
‘changed’: False, u’failed’: True, … u’msg’: u”No package matching ‘not_exist’ is available”}
task.args[key] = value¶
モジュールの引数を更新します。
以下のような Playbook を実行すると、
hosts: test strategy: debug gather_facts: yes vars:
pkg_name: not_exist
- tasks:
- name: install package apt: name={{ pkg_name }}
パッケージ名が間違っているためにデバッガーが呼び出されるため、モジュールの引数を修正します。
[192.0.2.10] TASK: install package (debug)> p task.args {u’name’: u’{{ pkg_name }}’} [192.0.2.10] TASK: install package (debug)> task.args[‘name’] = ‘bash’ [192.0.2.10] TASK: install package (debug)> p task.args {u’name’: ‘bash’} [192.0.2.10] TASK: install package (debug)> redo
次に、新しい引数でタスクを再実行します。
task_vars[key] = value¶
task_vars
を更新します。
上記と同じ Playbook を使用しますが、引数ではなく、task_vars
を修正します。
[192.0.2.10] TASK: install package (debug)> p task_vars[‘pkg_name’] u’not_exist’ [192.0.2.10] TASK: install package (debug)> task_vars[‘pkg_name’] = ‘bash’ [192.0.2.10] TASK: install package (debug)> p task_vars[‘pkg_name’] ‘bash’ [192.0.2.10] TASK: install package (debug)> update_task [192.0.2.10] TASK: install package (debug)> redo
次に、新しい task_vars
でタスクを再実行します。
Note
2.5 では、これは vars
から task_vars
に更新され、python 関数 vars()
と競合しませんでした。
u(pdate_task)¶
New in version 2.8.
このコマンドは、元のタスクのデータ構造および更新された task_vars
が含まれるテンプレートからタスクを再作成します。
使用例は、上記の task_vars[key] = value ドキュメントを参照してください。
c(ontinue)¶
続行するだけです。
無料ストラテジーの使用¶
空き
ストラテジーでデバッガーを使用すると、
デバッガーがアクティブである間に、追加のタスクがキューに入ったり、実行したりしなくなります。さらに、タスクで redo
を使用して再実行のスケジュールを設定すると、
Playbook に記載されている後続タスクの後に再スケジュールされたタスクが実行することがあります。
See also
- Playbook について
- Playbook の概要
- ユーザーメーリングリスト
- ご質問はございますか。 Google Group をご覧ください。
- irc.freenode.net
- IRC チャットチャンネル #ansible