Roles and profiles
Now that we know how to include different sets of classes on a given node, depending on the job the node is supposed to do, let's think more about how to name those classes in the most helpful way. For example, consider the following list of included classes for a certain node:
classes: - postgresql - apache - java - tomcat - my_app
The class names give some clues as to what this node might be doing. It looks like it's probably an app server running a Java app named my_app
served by Tomcat behind Apache, and backed by a PostgreSQL database. That's a good start, but we can do even better than this, and we'll see how in the next section.
Roles
To make it obvious that the node is an app server, why don't we create a class called role::app_server
, which exists only to encapsulate the node's included classes? That class definition might look like this (role_app_server.pp
):
# Be an app server class role::app_server { include postgresql include apache...