The term "role" is used to define certain patterns and processes of configuration on a single or several nodes. Imagine that if your application has high traffic and one server is not able to handle all requests, you might need another server to handle requests. You need Apache (or any other web server) across all nodes. In this case, you can create the role name Web Server, and it contains the run list of the Apache server with site configurations. Roles are defined in the same way as the normal recipes with
run_list. Similarly, we can create a database role to set up a database server.
Note that the use of roles with the Chef server is controversial. It's fine to use them with Chef-Solo.
Let's have a look at some real-world examples.
Now, we will create a cookbook to set up a Python/Django app with Nginx and uWSGI. We will not explain each bit of code as we did in the previous example, assuming that now we have an understanding of the recipe structure and the important code blocks...