Chapter 9. Roles: Scaling Up Your Playbooks

In Ansible, the role is the primary mechanism for breaking a playbook into multiple files. This simplifies writing complex playbooks, and it 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 function as database servers. One of the things I like about Ansible is how it scales both up and down. 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. A role is very structured and doesn’t have any site-specific data in it, so it can be shared with others, who can compose their site by combining roles in their own playbooks.

I’m not referring to the number of hosts you’re managing, but rather the complexity of the jobs you’re trying to automate. This chapter will get you Up and Running with Ansible roles!

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:

defaults/
  main.yml
files/
  pg_hba.conf
handlers/
  main.yml
meta/
  main.yml
tasks/
  main.yml
templates/
  postgres.conf.j2
vars/
  main.yml
Tasks

The tasks directory has a main.yml file that serves as an entry point for the actions a role does.

Files

Holds files and scripts to be uploaded to hosts.

Templates

Holds Jinja2 ...

Get Ansible: Up and Running, 3rd Edition 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.