Cooking with Chef

At its simplest, the process of developing infrastructure with Chef looks like this:

  • Declare policy using resources

  • Collect resources into recipes

  • Package recipes and supporting code into cookbooks

  • Apply cookbooks to nodes using roles

  • Run Chef to configure nodes according to their assigned roles

Resources

Resources are the very essence of Chef—the atoms, if you like. When we talk about a complicated, or even a simple infrastructure, that conversation takes place at a level of resources. For example we might discuss a webserver—what are the components of a webserver? Well, we need to install Apache, we need to specify its configuration and perhaps some virtual hosts, and we need to ensure the Apache service is running. Immediately, we’ve identified some resources—a package, a file, and a service.

Managing infrastructure using Chef is a case of specifying what resources are needed and how they interact with one another. We call this “setting the policy.”

If resources are the fundamental configuration objects, nodes are the fundamental things that are configured. When we talk about nodes, we’re typically talking about a machine that we want to manage. A concise definition of what Chef does is this:

“Chef manages resources on the node so they comply with policy.”

It’s important to understand that when we talk about resources in Chef, we’re not talking about the actual resource that ends up on the box. Resources in Chef are an abstraction layer. In the case of our scenario, it ...

Get Test-Driven Infrastructure with Chef 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.