てくなべ (tekunabe)

ansible / network / automation / StackStorm

【Ansible】 Playbook Debugger を特定のタスクだけ起動する方法

Playbook Debugger

Ansible には、Playbook 実行時に変数値の確認や、オプション値の変更ができる Playbook Debugger という機能があります。

デバッガーの起動条件

Ansible 2.5 以降では、debugger キーワードで、デバッガーの起動条件を指定できます。 たとえば、debugger: always と指定すると、常にデバッガーを起動します。

- hosts: junos
  gather_facts: no
  debugger: always    # point

  tasks:
    - name: task1
      debug:
        msg: "msg of task1"

    - name: task2
      debug:
        msg: "msg of task2"

    - name: task3
      debug:
        msg: "msg of task3"

この場合、最初のタスクからデバッガーが起動します。

特定のタスクだけ起動した場合はタスクに debugger を指定

それでは、途中のタスクからデバッガーを起動したい場合はどのようにすればよいでしょうか。 実は(?)、公式ドキュメントにも記載がありますが、debugger キーワードは、タスクごとにも指定できます。そのため、以下のように、task2 に debugger: always を指定すると、task2 だけデバッガーが起動します。

- hosts: junos
  gather_facts: no

  tasks:
    - name: task1
      debug:
        msg: "msg of task1"

    - name: task2
      debug:
        msg: "msg of task2"
      debugger: always         # point

    - name: task3
      debug:
        msg: "msg of task3"
  • 実行例
$ ansible-playbook -i inventory  test_debugger.yml

PLAY [junos] ***************************************************************

TASK [task1] ***************************************************************
ok: [vsrx1] => {
    "msg": "msg of task1"   # 通常どおり実行
}

TASK [task2] ***************************************************************
ok: [vsrx1] => {
    "msg": "msg of task2"   # ↓ デバッガーが起動
}
[vsrx1] TASK: task2 (debug)> task.args['msg']='Hello, task2.'  # msg オプションの変更
[vsrx1] TASK: task2 (debug)> redo  # task2 再実行
ok: [vsrx1] => {
    "msg": "Hello, task2."     # 変更した msg オプションの表示になった
}
[vsrx1] TASK: task2 (debug)> c  # 処理を継続

TASK [task3] ***************************************************************
ok: [vsrx1] => {
    "msg": "msg of task3"     # 通常どおり実行(以降、デバッガーは起動しない)
}

PLAY RECAP *****************************************************************
vsrx1                      : ok=3    changed=0    unreachable=0    failed=0