Managing Variables and Facts - Ansible Tutorial

Welcome to the tutorial on managing variables and facts in Ansible. Variables and facts are essential components of Ansible playbooks that enable you to define dynamic values and retrieve information about the managed hosts. In this tutorial, we will explore how to effectively manage variables and facts to enhance the flexibility and reusability of your playbooks.

Introduction to Variables and Facts

In Ansible, variables allow you to store values that can be used across playbooks, tasks, and templates. They provide a way to define dynamic values and make your playbooks more flexible. Facts, on the other hand, are pieces of information about the managed hosts that Ansible gathers automatically. These facts can be used within playbooks to make decisions or perform specific actions based on the host's characteristics.

Step-by-Step Guide

Follow these steps to effectively manage variables and facts in Ansible:

Step 1: Define Variables

Variables can be defined in various ways, such as within playbooks, in separate variable files, or even as command-line arguments. Choose the most suitable method based on your requirements. To define a variable within a playbook, use the `vars` keyword followed by the variable name and its value.

Here's an example of defining a variable within a playbook:

- hosts: webserver
    http_port: 80
    max_clients: 100

Step 2: Access Variables

To access variables within playbooks or templates, use the `{{ variable_name }}` syntax. Ansible will substitute the variable with its value during execution. Variables can be used in tasks, templates, conditionals, or any other place where dynamic values are needed.

Here's an example of using a variable within a task:

- name: Restart Apache
    name: apache2
    state: restarted
  when: http_port == 80

Step 3: Utilize Facts

Ansible automatically collects facts about the managed hosts, such as network interfaces, operating system details, or hardware information. You can access these facts using the `ansible_facts` variable. Facts are useful for conditionals, dynamically configuring tasks, or retrieving information about the hosts.

Here's an example of using a fact within a playbook:

- name: Display Host IP
    msg: "The IP address of the host is {{ ansible_facts['ansible_default_ipv4']['address'] }}"

Common Mistakes

  • Misspelling variable names or referencing undefined variables.
  • Overwriting or unintentionally modifying variables during playbook execution.
  • Not properly scoping variables within playbooks or tasks.
  • Forgetting to refresh facts when they need to be updated.
  • Confusing facts with variables and vice versa.

Frequently Asked Questions (FAQs)

  1. Q: Can I override variables defined in a playbook?
    A: Yes, you can override variables by defining them in a higher precedence file, such as a command-line argument, inventory file, or role variable file.
  2. Q: How can I dynamically assign values to variables?
    A: You can use Jinja2 expressions and filters within the playbook to dynamically assign values to variables based on conditions or calculations.
  3. Q: How do I access facts specific to a host?
    A: Each host's facts can be accessed using the `ansible_facts` variable. You can retrieve specific facts by their keys, such as `ansible_facts['ansible_distribution']`.


Managing variables and facts in Ansible allows you to enhance the flexibility and reusability of your playbooks. In this tutorial, we discussed the concept of variables and facts, their importance, and how to effectively use them within playbooks. We provided a step-by-step guide on defining variables, accessing them, and utilizing facts. Additionally, we highlighted common mistakes to avoid and answered frequently asked questions. By mastering the management of variables and facts, you can create more dynamic and adaptable Ansible playbooks to automate your infrastructure with ease.