Last modified 5 years ago Last modified on 04/30/14 04:09:41

Crowbar and Chef

The OpenStack and Ceph fabric was deployed using Dell's JumpStart? configuration provided by the Crowbar framework. Crowbar is a bare-metal provisioning tool built on top of Chef, a system configuration and management framework that treats system configuration like code. The motivation for this approach is to support scalable and repeatable deployment of complex software collections that have a lot of configuration steps.

Controlling this fabric requires an understanding of Crowbar and the tool it is built on, Chef. It can be pretty confusing to want to make a change on the systems but not be sure how to make the change, what part of the system should be changed (Crowbar, Chef, or underlying files), if the change will stick or get reverted by the management fabric, or if the change will brake some other system dependency. This page is an effort to answer these questions.

The most important points to remember are:

  1. Chef is used for all post-install management of the fabric. Crowbar 1.x is only designed for bare-metal provisioning.
  2. Crowbar is built on top of Chef and all the data (configuration rules) you see in Crowbar actually live in the Chef implementation sitting behind the scenes.


Crowbar was designed for bare-metal provisioning. It is designed to simplify taking a collection of hardware from bare-metal to operational OpenStack with a concise, controllable config. Crowbar is implemented in Chef and this means you can see everything that Crowbar does in the context of Chef.

Crowbar and Chef both have their own webased interfaces. Crowbar will likely be more of a reference UI because we can't use it for anything but node provisioning. It might not be too much of a stretch to think of it as playing the role of insert-ethers in our ROCKS fabric.

Once you get that Crowbar is Chef and only needed when you add hardware, it seems safe to set it aside for a while and concentrate on learning Chef.

Adding Storage

Crowbar is needed to expand storage on our fabric. See AddingStorageToCephWithCrowbar for details.


Chef is a systems configuration and management framework implemented in Ruby code. All system state is maintained as a systems-oriented Ruby code base in a source code repository. A systems developer creates, tests and maintains rules of behavior on her laptop. The improved rules for the system are then uploaded to the Chef server repository. The systems (nodes) in the fabric will pull the latest rules from the repository and update their state as directed, bringing the system in compliance with the desired operation.

You can take a simplistic object oriented view of this and think of a computer as an instantiation of a (potentially) complex object whose state can change over time. The developers role is to write the code that maintains the state of the object. Because our objects are "computers" we have the potential for very powerful objects.

The Chef framework's goal is to allow you to reduce complexity, so you can manipulate an object like a "web server" or a "database server" and speak about deploying them to "dev" "staging" or "prod". Chef is designed to let you hide the details but treat your environment like a unified program rather than a bunch of disparate devices.


There's lots to learn with Chef, including the Ruby language. But there's a good community out there, tools to get you started, and decent documentation.

The two most important things to do are:

You can do them in either order depending on what mood you're in: doing or reading. But both need to be done before you move on.

The install relies on Vagrant and VirtualBox. It's supported on all platforms. As you get into it, you might find Ubuntu 12.04 or 13.04 do a nice job of easily supporting these workflows.