Skip to main content

Getting started with Chef

·2 mins

Getting Started #

To begin, install Chef’s omnibus installer: Chef DK

Chef uses the chef tool for creating cookbooks, downloading cookbooks, and many other things.

chef generate repo chef-repo

This creates a chef-repo for connecting to Chef Server.

While this is great for getting started with Chef, creating cookbooks and keeping them in version control gets weird, since this is a single repo.

Cookbooks #

Chef Cookbooks are composed of recipes written in Ruby plus a Chef Ruby sugar for automating installing an application like Redis, Postgres, Solr, etc. Take a look at some of the community cookbooks:

Chef Supermarket

Lets say you want to modify a cookbook (these are called wrapper cookbooks)

Where do we keep track of our changes? Right in the chef repo?

There must be a better way for managing cookbooks, Berkshelf to the rescue.

ermahgerd berkshelf

Berkshelf? #

Included in the Chef DK, Berkshelf solves the problem of creating Chef cookbooks. This lets us version individual cooksbooks and their dependencies.

Jamie Winsor gives a great overview of what Berkshelf brings to the table: The Berkshelf Way (you’ll also find out why that meme is important…)

berks init . for an existing cookbook.


berks cookbook test_cookbook to create a new cookbook.

Write a Cookbook #

Here’s the full cookbook for a Solr instance: Apache Solr Cookbook

The salient parts are these three files:

  • metadata.rb : tells Chef about the cookbooks we depend on.
  • attributes/default.rb : configurable attributes for others to override.
  • recipes/default.rb : default recipe for running this cookbook.

The default.rb can be broken down into three easy steps:

1. Install Java (if configured, defaults to yes)

2. Download Solr and run

3. Setup logs and start e Solr service

Deploying with Vagrant #

vagrant logo

vagrant plugin install vagrant-berkshelf

Vagrantfile #

# Solr uses port 8983 by default "forwarded_port", guest: 8983, host: 8983

config.vm.provision :chef_solo do |chef|
    chef.run_list = [

vagrant up; vagrant provision

If all went according to plan you’ll have a Solr instance at localhost:8983