I am looking at automated deployment solutions for my team and have been playing with Chef for the past few days. I've been able to get a simple web app up an running from a base Red Hat VM using chef-solo.

Our end goal is to use Chef (or another system) to automatically deploy application topologies to the cloud as we run builds. Our process would basically run like so:

  1. Our web app code, dependencies, and chef cookbooks are stored in SCM
  2. A build is executed and greats a single package for images to acquire and test against
  3. The build engine then deploys new cloud images that run a chef client to get packages installed.
  4. The images acquire the cookbooks from SCM or the Chef server and install everything to get up and running

What are the benefits and/or use cases for getting a Chef Server running?

Are there any major benefits to have a Chef Server hold and acquire the cookbooks from SCM vs. using chef-solo and having a script that will pull the cookbooks from SCM?

link|improve this question
feedback

2 Answers

up vote 3 down vote accepted

Disclosure: I work for Opscode.

The major benefit of Chef Server over Solo is the ability to use search with your infrastructure. The classic example is a load balancer with web servers. The load balancer can automatically update its configuration as web servers are added and removed to the infrastructure, simply by searching for them. Solo is just that, single machines, while Chef Server brings the ability to query for things like "all machines with more than 4 gigs of RAM" or "the database master".

Chef Server also gives you the ability to manage your infrastructure without copying tarballs around, to visualize your infrastructure with the management console and to manage which machines are running which versions of cookbooks with Environments. There are other benefits, but those are the ones off the top of my head. If you want to try out the Chef Server without installing it, just sign up for a Opscode Hosted Chef account, the first 5 nodes are free.

link|improve this answer
Thanks mray, that information helps a TON. Do you know how one would embrace DevOps philosophies when using the Chef server? What I mean by this is having all of our cookbooks live in SCM. Is there an easy way to have Chef server get updated cookbooks as we deliver new code? – strife25 Jun 27 '11 at 19:13
@strife25 You should definitely have your cookbooks in a version control system. If you're not beholden to one, Opscode recommends Git as it is easy to work with branches and rocks for distributed teams. You could write a post-commit hook that uploads cookbooks to the Chef server. You don't just clone cookbooks on the Chef server because you upload them via an API, and this is very much on purpose by design. – jtimberman Sep 25 '11 at 6:16
feedback

chef-server manages cookbooks and configuration data for your nodes.

You add cookbooks to chef-server using the knife tool and then give each node a run list of recipes so they grab the cookbooks they need when the node sets itself up using chef-client. Since chef-client runs in the background, your nodes will check periodically if there are updated cookbooks in your chef-server.

chef-server also holds your configuration data & variables so you can change settings for your nodes to pick up automatically. This is good for more dynamic settings that shouldn't or can't be hardcoded in your recipes.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.