Playbooks can be interactively debugged by using an execution strategy that was introduced in Ansible 2.1, the debug strategy. If a play uses this strategy, when an error state is encountered an interactive debugging session starts. This interactive session can be used to display variable data, display task arguments, update task arguments, update variables, redo task execution, continue execution, or exit the debugger.
Let's demonstrate this with a play that has a successful task, followed by a task with an error, followed by a final successful task. We'll reuse the playbook we've been using, but update it a bit, as shown in the following code:
--- - name: sub-element access styles hosts: localhost gather_facts: false strategy: debug vars: - derp: keys: - c - d tasks: - name: subscript style debug: var: derp['keys'] - name: failing task debug: msg: "this is {{ derp['missing'] }}" - name: final task debug: msg: "my only friend the end"
Upon execution, Ansible will encounter an error in our failing task and present the (debug) prompt, as shown in the following screenshot:
From this prompt, we can display the task and the arguments to the task by using the p command, as follows:
We can also change the playbook on the fly to try different arguments or variable values. Let's define the missing key of the derp variable, and then retry the execution. All of the variables are within the top-level vars dictionary. We can directly set the variable data using Python syntax and the task_vars command, and then retry with the r command:
The debug execution strategy is a handy tool for quickly iterating through different task argument and variable combinations to figure out the correct path forward. However, because errors result in interactive consoles, the debug strategy is inappropriate for automated executions of playbooks, as there is no human on the console to manipulate the debugger.