Playbook Debugger ================= .. contents:: Topics In 2.1 we added a ``debug`` strategy. This strategy enables you to invoke a debugger when a task is failed, and check several info, such as the value of a variable. Also, it is possible to update module arguments in the debugger, and run the failed task again with new arguments to consider how you can fix an issue. To use ``debug`` strategy, change ``strategy`` attribute like this:: - hosts: test strategy: debug tasks: ... For example, run the playbook below:: - hosts: test strategy: debug gather_facts: no vars: var1: value1 tasks: - name: wrong variable ping: data={{ wrong_var }} The debugger is invoked since *wrong_var* variable is undefined. Let's change the module's args, and run the task again:: PLAY *************************************************************************** TASK [wrong variable] ********************************************************** fatal: [192.168.1.1]: FAILED! => {"failed": true, "msg": "ERROR! 'wrong_var' is undefined"} Debugger invoked (debug) p result {'msg': u"ERROR! 'wrong_var' is undefined", 'failed': True} (debug) p task.args {u'data': u'{{ wrong_var }}'} (debug) task.args['data'] = '{{ var1 }}' (debug) p task.args {u'data': '{{ var1 }}'} (debug) redo ok: [192.168.1.1] PLAY RECAP ********************************************************************* 192.168.1.1 : ok=1 changed=0 unreachable=0 failed=0 This time, the task runs successfully! .. _available_commands: Available Commands ++++++++++++++++++ .. _p_command: p *task/vars/host/result* ````````````````````````` Print values used to execute a module:: (debug) p task TASK: install package (debug) p task.args {u'name': u'{{ pkg_name }}'} (debug) p vars {u'ansible_all_ipv4_addresses': [u'192.168.1.1'], u'ansible_architecture': u'x86_64', ... } (debug) p vars['pkg_name'] u'bash' (debug) p host 192.168.1.1 (debug) p result {'_ansible_no_log': False, 'changed': False, u'failed': True, ... u'msg': u"No package matching 'not_exist' is available"} .. _update_args_command: task.args[*key*] = *value* `````````````````````````` Update module's argument. If you run a playbook like this:: - hosts: test strategy: debug gather_facts: yes vars: pkg_name: not_exist tasks: - name: install package apt: name={{ pkg_name }} Debugger is invoked due to wrong package name, so let's fix the module's args:: (debug) p task.args {u'name': u'{{ pkg_name }}'} (debug) task.args['name'] = 'bash' (debug) p task.args {u'name': 'bash'} (debug) redo Then the task runs again with new args. .. _update_vars_command: vars[*key*] = *value* ````````````````````` Update vars. Let's use the same playbook above, but fix vars instead of args:: (debug) p vars['pkg_name'] u'not_exist' (debug) vars['pkg_name'] = 'bash' (debug) p vars['pkg_name'] 'bash' (debug) redo Then the task runs again with new vars. .. _redo_command: r(edo) `````` Run the task again. .. _continue_command: c(ontinue) `````````` Just continue. .. _quit_command: q(uit) `````` Quit from the debugger. The playbook execution is aborted. .. seealso:: :doc:`playbooks` An introduction to playbooks `User Mailing List `_ Have a question? Stop by the google group! `irc.freenode.net `_ #ansible IRC chat channel