AnsiblePilot — Master Ansible Automation

AnsiblePilot is the leading resource for learning Ansible automation, DevOps, and infrastructure as code. Browse over 1,400 tutorials covering Ansible modules, playbooks, roles, collections, and real-world examples. Whether you are a beginner or an experienced engineer, our step-by-step guides help you automate Linux, Windows, cloud, containers, and network infrastructure.

Popular Topics

About Luca Berton

Luca Berton is an Ansible automation expert, author of 8 Ansible books published by Apress and Leanpub including "Ansible for VMware by Examples" and "Ansible for Kubernetes by Example", and creator of the Ansible Pilot YouTube channel. He shares practical automation knowledge through tutorials, books, and video courses to help IT professionals and DevOps engineers master infrastructure automation.

Ansible Debug Module: Print Variables & Messages During Playbook Execution

By Luca Berton · Published 2024-01-01 · Category: troubleshooting

How to print variables and debug messages during Ansible playbook execution with the debug module. Use msg, var, and verbosity parameters.

Ansible Debug Module: Print Variables & Messages During Playbook Execution

How to print a text or a variable during the execution with Ansible?

I’m going to show you step-by-step in a live Playbook with some example code. I’m Luca Berton and welcome to today’s episode of Ansible Pilot

See also: Ansible debug Module: Print Variables & Debug Messages (Complete Guide)

Ansible Print text/variable during execution

Today we’re talking about Ansible module debug. It’s part of the ansible.builtin collection so it’s part of the collection of modules “builtin” with ansible and shipped with it. It’s a stable module and works with a variety of operating systems. The purpose is to print statements during execution. This means not only text but also all the possible Ansible variables and facts

Parameters

• msg _string_ • var _string_ • verbosity _integer_

This module has three parameters. If you launch without any parameter the default “Hello world!” (with exclamation mark) is printed. If we prefer to customize the message we need to specify the “msg” parameter. In the same way, the “var” parameter allows us to print a variable. We could combine text and variables in the “msg” field. Please note that you need to use always the double brackets when we want the variable value. The "verbosity" is for advanced users if you would like to hide our debug code in normal execution but keep it in the playbook if we need it in debug mode. The value could vary from 0 normal execution to 3.

See also: Ansible Multi-Line Strings: Literal (|) & Folded (>) Block Scalars Guide

Ansible debug module Playbook

Let’s jump in live Ansible debug module Playbook.

In the following example we are going beyond the print of “Hello world!” text, printing a text, a variable, text and variable, and Playbooknstrate to you how to use the verbosity level. Are you ready?

---
- name: debug module Playbook
  hosts: all
  vars:
    fruit: "apple"
  tasks:
    - name: debug message
      ansible.builtin.debug:
        msg: "our fruit is {{ fruit }}"
        verbosity: 2

code with ❤️ in GitHub

Debug Module Usage Patterns

Print a simple message

- name: Show deployment info
  ansible.builtin.debug:
    msg: "Deploying version {{ app_version }} to {{ inventory_hostname }}"

Print a variable

- name: Show all ansible facts
  ansible.builtin.debug:
    var: ansible_facts

- name: Show specific fact ansible.builtin.debug: var: ansible_distribution

Print registered variable from command output

- name: Check disk space
  ansible.builtin.command: df -h /
  register: disk_result
  changed_when: false

- name: Show disk space ansible.builtin.debug: var: disk_result.stdout_lines

Conditional debug (only show on verbose)

- name: Detailed debug info (only with -v)
  ansible.builtin.debug:
    msg: "Connection details: {{ hostvars[inventory_hostname] }}"
    verbosity: 1  # Only shows with ansible-playbook -v

- name: Very detailed debug (only with -vv) ansible.builtin.debug: msg: "Full variable dump: {{ vars }}" verbosity: 2

Print multiple variables

- name: Show deployment summary
  ansible.builtin.debug:
    msg:
      - "Host: {{ inventory_hostname }}"
      - "OS: {{ ansible_distribution }} {{ ansible_distribution_version }}"
      - "IP: {{ ansible_default_ipv4.address }}"
      - "RAM: {{ ansible_memtotal_mb }}MB"
      - "CPUs: {{ ansible_processor_vcpus }}"

Debug loop results

- name: Check service status
  ansible.builtin.service_facts:

- name: Show status of key services ansible.builtin.debug: msg: "{{ item }}: {{ ansible_facts.services[item].state | default('not found') }}" loop: - nginx.service - postgresql.service - redis.service

See also: Ansible blockinfile Module: Insert & Manage Multi-Line Text Blocks (Guide)

msg vs var

| Parameter | Accepts Jinja2 | Shows | |-----------|----------------|-------| | msg | Yes ({{ }}) | Formatted message string | | var | No (bare name) | Full variable content with type info |

# These are equivalent:
- debug:
    msg: "{{ my_list }}"
- debug:
    var: my_list
# But var shows more detail (type, structure)

Debugging Strategies

Strategy 1: Add debug tasks temporarily

- name: DEBUG - show variable before use
  ansible.builtin.debug:
    var: database_config
  tags: [debug]  # Run only with --tags debug

Strategy 2: Use ansible -m debug ad-hoc

# Check a variable without running full playbook
ansible server1 -m debug -a "var=hostvars[inventory_hostname]" -i inventory

Strategy 3: Use callback plugins

# Get detailed task timing
ANSIBLE_CALLBACKS_ENABLED=timer,profile_tasks ansible-playbook playbook.yml

FAQ

How do I pretty-print JSON in debug?

- name: Pretty print JSON
  ansible.builtin.debug:
    msg: "{{ my_dict | to_nice_json }}"

Can I write debug output to a file?

Use copy module instead:

- name: Save debug to file
  ansible.builtin.copy:
    content: "{{ my_var | to_nice_yaml }}"
    dest: /tmp/debug_output.yml
  delegate_to: localhost

How do I suppress debug output in production?

Use the verbosity parameter or tags:

- debug:
    msg: "{{ sensitive_data }}"
    verbosity: 3  # Only shows with -vvv

Conclusion

Now you know how to print text/variable during execution with Ansible.

Related Articles

Ansible debug Module: Print Variables & Messages (Complete Guide)Ansible debug Module: Print Variables & Debug Messages (Complete Guide)Ansible Automation: Complete Guide to IT Automation with Playbook Examples

Category: troubleshooting

Watch the video: Ansible Debug Module: Print Variables & Messages During Playbook Execution — Video Tutorial

Browse all Ansible tutorials · AnsiblePilot Home