The first version of Chef Development Kit (a.k.a. Chef DK) is here.
What is Chef DK?
Chef DK is a package that contains all the development tools you will need when coding Chef. It combines the best of the breed tools developed by Chef community with Chef Client.
Here is what you can do with Chef DK:
- Get your cookbook dependencies under control and have a sane way of composing the cookbooks you need with the hot new Berkshelf 3.0
- Take advantage of built-in testing with the de-facto lint tool for cookbooks FoodCritic, cookbook unit testing framework ChefSpec & the leading integration testing framework for coded infrastructure Test Kitchen
- Easily setup and upgrade the Chef Client on your workstation
- Get introduced to the brand new Chef workflow tool called
The community developed tools that you have known and have been using for a while are now housed in an official Chef product.
New workflow tool: chef
One of the strongest feats of Chef is its flexibility. It grew organically adapting to the many different workflows our users needed to run the technology stack behind their businesses. As a side effect of this organic growth, the new comers to Chef has faced with different ways of doing a thing with individual pros and cons. This decreased the approachability of Chef.
With Chef DK this paradigm is being broken. Chef DK includes a brand new tool called
chef. The design goal of this tool is to “Streamline Chef Workflow for all”. Chef
DK will offer new users a streamlined workflow, while maintaining the powerful flexibility for advanced Chef users.
We have a long way to get to this goal. But some of the things we can see when we get there may be:
- Configurable generators that support the commonly used cookbook patterns
- Deep integration between Berkshelf, Knife and Chef Client
- Builtin development and test environment provisioning in the cloud
With version 0.0.1, we’re taking a small step in this direction with two small features:
chef gem: Easily install gems or knife-plugins into your Chef DK setup.
chef generate: Minimalistic cookbook generators powered by Chef.
PS: A couple words on the naming… We’ve always find it surprising that when you install Chef, you do not get any tools named “chef”. For a while we’ve considered calling one of the tools we have developed “chef” but never found the perfect match. Given that this tool is going to be the primary tool that our users will interact with in the future; if a tool is ever going to be called “chef” it would be this tool. Hence the name “chef” :)
We are fans of Continuous Delivery. We believe it’s a significant competitive advantage. Also what’s the point of waiting for 2-3 months to deliver a bug fix or a new feature?
We have been working closely with our Awesome Release Engineering (ARE) team to build new continuous integration clusters which will be able to deliver well tested builds of Chef DK to you daily. This means you will be able to see your contributions in Chef DK the day after they’re merged.
More details to follow after ChefConf about this topic.
We are also fans of speed. Who wants to wait for a couple of minutes for their cookbook dependencies to get solved, or some 10 seconds after running
When developing Chef DK, we’re taking performance as a primary consideration. Having a responsive tool at your workstations is the first step in having a delightful user experience. Here are couple of things in Chef DK that makes it more performant:
gecode in Berkshelf
The first major collaboration effort between Berkshelf Team and Chef has been on the dependency resolution. Berkshelf 3.0 ships with gecode as its dependency solver. You will hear a lot about this during and after ChefConf. But in a nutshell, this effort ensures that dependencies are resolved faster and in agreement with the Chef Server (which also uses gecode as dependency resolver).
How fast? Here are some numbers (in seconds) comparing gecode with pure ruby implementation while resolving Chef Inc. platform cookbook dependencies:
appbundler locks down an application’s dependencies to the versions selected by bundler using a Gemfile.lock. This way applications run faster because rubygems doesn’t resolve the dependency constraints at the runtime. This also
protects the application from incompatible dependencies. All of the binaries included in Chef DK are using appbundler. You can read more about it here.
As being a workstation tool, Chef DK will be supported in all the common workstation platforms. The first version of Chef DK is built and tested on:
- Mac OS X 10.9
- Ubuntu 12.04
- Ubuntu 13.10
- RHEL 6
Yes we’re missing Windows. And yes it’s the next thing in our to-do list. Support for Windows 7 and windows 8.1 is on its way.
The ambitious goal to “Streamline Chef Workflow for all” is really making us bite our nails. Thankfully we have a strong community that will help us get to this goal.
Our next big step towards this goal will be to prototype the streamlined Chef Workflow, discuss, work & iterate on it with you. We will have public online discussions in the near future. But this week, all of us are in San Francisco @ ChefConf2014. Feel free to grab anyone with a Staff T-shirt and say “I want to talk about this streamlined Chef Workflow” and let’s talk.
Finally, as usual Chef DK is Open Source. Feel free to open a Github issue or send a PR. Yes not a typo, I meant to say Github issue. We’re working on
our contribution and issue tracking processes to make it easier to contribute and send us feedback. Stay tuned for more updates on this but feel free to use Github issues on
Thanks for hanging on and getting to the end of this long post. A lot of good work went into Chef DK. Even though it’s not possible to list all the names here, here is a courageous attempt to do so (Apologies in advance for any name that’s forgotten).
- Berkshelf Team Jamie, Michael Ivey, SethV who has just released Berkshelf 3.0 w00t!!
- Fletcher for writing test-kitchen and his great feedback on Chef DK.
- Andrew for writing FoodCritic & Seth Vargo for ChefSpec.
- Mike, Jon, Pete, Noah, JohnK for their support and helpful discussions.
- Our own Awesome Release Engineering Team Yvonne, Seth & Seth who have been training Jenkins to behave.
- Nathan Smith for the beautiful download page
Grab Chef DK here and as usual feel free to reach out if you have any questions or seeing any issues.