ansible roles
Ansible roles are a way to organize tasks, variables, files, and templates into a reusable package that can be easily shared and applied to different playbooks. Roles provide a way to simplify the organization of tasks and allow for easier sharing and reuse of configurations.
A role is a directory structure that contains the following subdirectories:
defaults
: This directory contains default variables for the role. These variables can be overridden in the playbook.vars
: This directory contains variables specific to the role.tasks
: This directory contains the main set of tasks that the role will perform.files
: This directory contains files that the role will copy to the remote hosts.templates
: This directory contains templates that the role will use to generate files that will be copied to the remote hosts.meta
: This directory contains metadata about the role, such as dependencies on other roles.
Here's an example of a simple Ansible role:
roles/ └── webserver ├── defaults │ └── main.yml ├── files │ └── index.html ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates │ └── nginx.conf.j2 └── vars └── main.yml
In this example, we have a role called webserver
. The role contains directories for defaults
, files
, meta
, tasks
, templates
, and vars
.
The defaults
directory contains a file called main.yml
, which contains default variables for the role.
The files
directory contains a file called index.html
, which will be copied to the remote hosts.
The meta
directory contains a file called main.yml
, which specifies any dependencies for the role.
The tasks
directory contains a file called main.yml
, which contains the main set of tasks for the role.
The templates
directory contains a file called nginx.conf.j2
, which is a Jinja2 template that will be used to generate a configuration file for the remote hosts.
The vars
directory contains a file called main.yml
, which contains variables specific to the role.
Once a role has been created, it can be easily included in a playbook by using the roles
keyword:
- hosts: web_servers roles: - webserver
This will apply the webserver
role to all hosts in the web_servers
group. Any variables or tasks defined in the role will be applied to the hosts as specified in the role directory structure.