Skip to main content

Creating and Using Ansible Roles

Introduction to Ansible Roles

Roles in Ansible provide a framework for fully independent, reusable collections of variables, tasks, files, templates, and modules which together can be used to automate IT infrastructures. They are quite essential in creating complex playbooks as they allow breaking down large playbooks into smaller, reusable files. This makes writing playbooks easier and allows easy sharing and reusing of Ansible content.

Structure of Ansible Roles

An Ansible role has a standard file structure as follows:

rolename/
defaults/
main.yml
handlers/
main.yml
meta/
main.yml
tasks/
main.yml
templates/
main.yml
vars/
main.yml

Each folder has its purpose:

  • defaults: This directory contains default variables for the role.
  • handlers: This directory contains handlers, which may be used by this role or even anywhere outside this role.
  • meta: This directory can define some metadata for this role. Details like author, company, license, or role dependencies can be specified here.
  • tasks: This directory contains the main list of tasks that the role will execute.
  • templates: You can place all files here, which will use variables to change the file during runtime.
  • vars: Variables for the roles can be specified in this directory.

Creating an Ansible Role

To create a new Ansible role, you can use the ansible-galaxy command, as shown below:

ansible-galaxy init role_name

This will create a directory named role_name with the structure we discussed above.

Using Ansible Roles

Now that you have created a role, you can use it in a playbook as shown below:

---
- hosts: webservers
roles:
- role: role_name

This playbook will apply the role_name role to the webservers group.

Conclusion

Ansible roles help in making playbooks more manageable and reusable. They enable Ansible users to share their automation workflows and make collaborative work much easier. Therefore, understanding and using roles is a critical skill when working with Ansible.

In the next steps of your journey with Ansible, I recommend experimenting with creating and using roles, perhaps start by creating a simple role to manage a web server, and then gradually increase the complexity as you become more comfortable.

Happy automating!