Ansible Roles provide a standardized way to package and modularize automation tasks, handlers, variables, and templates for clean reusability.
🔗 Related: Ansible Core Cheat Sheet · Ansible Quickstart Guide · Ansible Playbook Examples
Standard Role Directory Layout
Generate a scaffolded role layout using ansible-galaxy init <role_name>:
roles/
common/
tasks/
main.yml # Primary entry point for tasks executed by the role
handlers/
main.yml # Handlers triggered via notify
templates/ # Jinja2 templates (.j2) referenced by template module
files/ # Static assets and scripts transferred via copy module
vars/
main.yml # High-precedence variables specific to this role
defaults/
main.yml # Default low-precedence variables (overrideable)
meta/
main.yml # Role dependencies and author metadata
Using Roles in Playbooks
---
- name: Apply common and webserver roles
hosts: webservers
become: true
roles:
- role: common
- role: nginx
vars:
nginx_port: 8080
Variable Precedence in Roles
Variables defined in defaults/main.yml have the lowest precedence in Ansible, making them safe defaults that users can easily override via inventory or playbook vars.
Variables in vars/main.yml have high precedence and are reserved for role-internal constant logic.