Chapter 8. Roles: Scaling Up Your Playbooks
One of the things I like about Ansible is how it scales both up and down. I’m not referring to the number of hosts you’re managing, but rather the complexity of the jobs you’re trying to automate.
Ansible scales down well because simple tasks are easy to implement. It scales up well because it provides mechanisms for decomposing complex jobs into smaller pieces.
In Ansible, the role is the primary mechanism for breaking apart a playbook into multiple files. This simplifies writing complex playbooks, and it also makes them easier to reuse. Think of a role as something you assign to one or more hosts. For example, you’d assign a database role to the hosts that will act as database servers.
Basic Structure of a Role
An Ansible role has a name, such as “database.” Files associated with the database role go in the roles/database directory, which contains the following files and directories.
- roles/database/tasks/main.yml
-
Tasks
- roles/database/files/
-
Holds files to be uploaded to hosts
- roles/database/templates/
-
Holds Jinja2 template files
- roles/database/handlers/main.yml
-
Handlers
- roles/database/vars/main.yml
-
Variables that shouldn’t be overridden
- roles/database/defaults/main.yml
-
Default variables that can be overridden
- roles/database/meta/main.yml
-
Dependency information about a role
Each individual file is optional; if your role doesn’t have any handlers, there’s no need to have an empty handlers/main.yml file.
Get Ansible: Up and Running now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.