Chef roles Tutorials and Example



What is Role?

A role is a way to define certain patterns and processes that exist across nodes in an organization as belonging to a single job function. Each role consists of zero (or more) attributes and a run-list. Each node can have zero (or more) roles assigned to it. When a role is run against a node, the configuration details of that node are compared against the attributes of the role, and then the contents of that role’s run-list are applied to the node’s configuration details. When a chef-client runs, it merges its own attributes and run-lists with those contained within each assigned role.

How to use Roles in Chef?

  1. Create a Role and add the cookbooks into it.
  2. Assign the role into each node or bootstrap new nodes using roles
  3. The the run list

How to create Role?

Method 1: In Chef Server directly


Add the run list e.g. “recipe[nginx]” under “run_list”

Save & exit

The role will be created in Chef Server.


Let’s download the role from the Chef server so we have it locally in a Chef repository.

> knife role show client1 -d -Fjson > roles/client1.json

Now, Lets bootstrap the node using knife with roles

How to edit the roles in chef Server?

Method 2: In local repo under chef-repo folder

example –

& Then upload to chef server using following commands.

How Assigning Roles to Nodes?

This will bring up the node’s definition file, which will allow us to add a role to its run_list:

For instance, we can replace our recipe with our role in this file:

How to bootstrap node using role?

How to run roles against nodes?

You can run chef-client on multiple nodes via knife ssh command like, To query for all nodes that have the webserver role and then use SSH to run the command sudo chef-client, enter:

To find the uptime of all of web servers running Ubuntu on the Amazon EC2 platform, enter:


Rajesh Kumar
Total Page Visits: 836 - Today Page Visits: 1