Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Introduction to Variables and Facts in Ansible

1. What are Variables in Ansible?

Variables in Ansible provide a way to store and manipulate data that can be used throughout your playbooks and roles. They allow you to create dynamic and reusable automation scripts. Variables can be defined in multiple places and have a specific precedence order.

2. Defining Variables

Variables can be defined in various ways in Ansible, including in playbooks, inventory files, and variable files. Here’s an example of defining a variable in a playbook:

example_playbook.yml
---
- hosts: webservers
  vars:
    http_port: 80
  tasks:
    - name: Ensure HTTP port is correct
      debug:
        msg: "The HTTP port is {{ http_port }}"
                

3. Using Variables

Variables can be used in playbooks to make them more dynamic. You can reference a variable by using the double curly braces {{ variable_name }}. Here is an example:

example_playbook.yml
---
- hosts: webservers
  vars:
    http_port: 80
  tasks:
    - name: Open HTTP port
      firewalld:
        port: "{{ http_port }}/tcp"
        permanent: true
        state: enabled
      become: true
                

4. What Are Facts in Ansible?

Facts in Ansible are pieces of information about the remote systems that are gathered when a playbook runs. These facts provide details about the system, such as IP addresses, operating system, and hardware information. Facts are gathered automatically by Ansible using the setup module.

5. Gathering Facts

Facts are gathered by default at the start of the playbook execution. You can also gather facts manually using the setup module. Here is an example:

example_playbook.yml
---
- hosts: all
  tasks:
    - name: Gather facts
      setup:
    - name: Display all facts
      debug:
        var: ansible_facts
                

6. Accessing Facts

Facts can be accessed using the ansible_facts variable. You can access specific pieces of information from the facts dictionary. Here’s an example:

example_playbook.yml
---
- hosts: all
  tasks:
    - name: Print operating system
      debug:
        msg: "The operating system is {{ ansible_facts['os_family'] }}"
                

7. Custom Facts

In addition to the built-in facts, you can also create custom facts. Custom facts can be created by placing JSON or INI formatted files in the /etc/ansible/facts.d directory on the remote system. Here’s an example of a simple custom fact:

/etc/ansible/facts.d/custom.fact
[custom]
favorite_color=blue
                

You can then access this custom fact in your playbooks:

example_playbook.yml
---
- hosts: all
  tasks:
    - name: Display custom fact
      debug:
        msg: "The favorite color is {{ ansible_facts['custom']['favorite_color'] }}"
                

Conclusion

Understanding how to use variables and facts is essential for writing effective Ansible playbooks. Variables help you create dynamic and flexible playbooks, while facts provide valuable information about your managed systems. By mastering these concepts, you can create more powerful and efficient automation scripts.