Skip to main content

Introduction to Ansible Roles

Hello learners, today we're going to dive into an integral part of Ansible - Ansible Roles. Ansible Roles are a way of automatically loading certain vars_files, tasks, and handlers based on a known file structure. They allow you to break your configuration management code into smaller, reusable files, which can be used across different projects and teams.

What are Ansible Roles?

In Ansible, a role is an independent block of tasks, files, templates, and variables, which serve a specific purpose. They can be used to organize playbooks into reusable and shareable components. By using roles, you can abstract your code into higher-level chunks, and reuse these chunks across different projects.

Why Use Ansible Roles?

The main benefits of using Ansible roles are:

  • They provide a framework for fully independent or interdependent collections of variables, tasks, files, templates, and modules.
  • They can be easily reused and shared.
  • They help in managing complexity and keeping your playbooks clean and readable.

Ansible Role Directory Structure

An Ansible role has a pre-defined directory structure. Here's a basic overview of what that looks like:

rolename
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml

Each directory has a specific purpose:

  • defaults: This directory contains the default variables for the role.
  • files: This directory contains files which we want to transfer to the remote machine.
  • handlers: Handlers are just like regular tasks in an Ansible playbook but they run only if a Task reports a change.
  • meta: This directory can contain files that establish role dependencies. You can list roles that must be applied before the current role can work correctly.
  • tasks: This directory contains the main list of tasks to be executed by the role.
  • templates: You can place all dynamic files, those that use variables to change the file content during runtime, in this directory.
  • vars: Variables for the roles can be specified in this directory and these variables have higher priority than variables specified in the defaults directory.
  • tests: This directory contains test playbooks and inventory file.

Creating an Ansible Role

To create an Ansible role, you can use the ansible-galaxy init command:

ansible-galaxy init role_name

This will create a directory named role_name with the standard Ansible role directory structure.

Using Ansible Roles in Your Playbook

To use a role in your playbook, you can use the roles keyword, followed by the name of your role.

---
- hosts: webservers
roles:
- role_name

This will run the role_name role on the webservers group of hosts.

That concludes our introduction to Ansible Roles. In the next section, we'll dive deeper into how you can use Ansible roles to manage complexity and promote code reuse. Stay tuned!