Chef 0.7.0 Release


Chef 0.7.0 is hot off the presses, and it brings several great new
features along with the traditional heap of improvements and bug
fixes. This is a big release, and the first since we released Chef
back in January that hasn’t been backwards compatible. Take a second
and let that soak in - when you upgrade to
you’ll have a bit of work to do: specifically, add metadata to your
and make
sure you update both the clients and the server.

So what’s the new hotness that caused a break in backwards
compatability, you ask? Several things:

  • Role Support: Chef
    now supports the concept of a ‘role’, which makes it easier to apply
    complex configurations to your servers. Check out the video of
    configuring roles through the web UI
  • Refined Cookbook Distribution via
    : You now need
    to supply ‘metadata’ about your cookbooks - in particular, what other
    cookbooks they depend upon. This feature is the first step in getting
    to the stage where we can start providing more complex user interfaces
    on top of Chef, and a foundation for automated cookbook distribution
    and discovery.
  • The Chef Server UI now requires authentication everywhere.

Fear not, though - just follow the upgrade

and you’ll be good to go.

If you are new to Chef, it’s a great time to be joining our burgeoning
community - head on over to the wiki for the install

But enough with the pre-amble - there is a main event to be had here,
and that is the announcement of the Chef 0.7.0 MVP. We have
contributions from 9 different people in this release, and many others
helped out by filing tickets and testing the fixes. One man, however,
stood up and earned himself the MVP… and with it a nickname. That
man is Matthew Kent, who closed 13 tickets for this release - more
than anyone else (including me, and anyone else paid to work on Chef.)
His performance during this release was like Lebron James almost
getting the 50 point triple double - it firmly establishes him as a
mainstay and rock-star in the Chef community. Matthew ‘Lebron’ Kent,
we salute you. For this release, Matthew (er, Lebron):

  • Fixed compatibility issues with Ruby 1.8.5
  • Added syntax checking for templates into the 'rake install’
    process for Chef Repositories
  • Fixed up the Red Hat Service Provider to properly leverage ‘chkconfig’
  • Eradicated the bug which was causing errant log-file truncation
  • Reported and fixed an issue where some recipes could still be
    evaluated twice
  • Drastically improved how the User providers manage home directories
  • Numerous fixes to the Yum provider, improving its performance and
    fixing bugs
  • Spotted and removed a method that was left over after
    re-factoring, making the whole code base saner. :slight_smile:

While Mr. Kent gets the spotlight for his display of ticket-resolving
madness, the rest of us weren’t exactly sitting around gawking:

Caleb Tennis wrote
posts about Chef. He also
provided a pair of patches for Portage, making it both faster and more
efficient, and extended the group resource to allow for adding and
removing individual users from the group.

David Lee fixed one of the more irritating aspects of Chef’s search
index support
you can now reference the results in the same fashion you can access
them on the node object directly, in addition to the flattened
structure we returned previously. It’s a nice bit of Ruby fu -
thanks, David!

Chef 0.6.2 MVP David Balatero provided us with a
MacPorts package provider.

Jason Jackson provided us with an update to the Route provider,
enabling platform specific configuration files to be updated -
initially, Red Hat and friends are supported. He then turned his eye
on network interfaces, providing similar functionality. So Red Hat
fans, send some love his way, because he sent some yours.

The 37 Signals boys popped in with a pair
of patches. Joshua Sierles fixed up the Remote
Directory provider when used via Chef Solo, while Mark
made life easier on Chef
Contributors by making the Chef Server run cleanly from the source

Miguel Cabeça improved the Mount provider to support LABEL and UUID,
along with a supremely useful patch to several of the Package
providers: you can now specify an ‘options’ attribute to package
resources, and the extra options will be added to the resulting
command. (This was also done by Caleb for the Portage provider -

Stephen Haynes provided a patch to fix a silly bug that caused the
FreeBSD User and Group provider to be removed from the platforms
mapping - thanks for the fix, Stephen.

From the Opscode crew:

AJ Christensen re-factored the CLI applications, so they are test-able
and much more consistent. He also moved much of Chef’s functionality
over to a series of libraries, making them re-usable from other
applications: Mixlib::Config,
Mixlib::Log, and
Mixlib::CLI. Check them out
if you want your apps to behave like Chef.

Nuo Yan implemented some alternative syntax for specifying
notifications to multiple resources.

Joshua Timberman added metadata to every cookbook in the Opscode
cookbooks repository
, patched up
the file used in passenger installs, and resolved an issue
with Passenger complaining about log file handles.

Finally, I added support for Cookbook
Roles, re-factored the
distribution of cookbooks to the edge nodes to only include those
required to build a given server, and made various Web UI

The full change log:

Release Notes - Chef - Version 0.7.0

** Bug
* [CHEF-178] - remote_directory not supported in chef-solo
* [CHEF-187] - Mount Resource should handle LABEL and UUID
* [CHEF-242] - activesupport conflicts with to_json in node.rb
* [CHEF-245] - chef/provider/user/useradd.rb should only add -m to
command line if home directory is being modified
* [CHEF-253] - chef-server-slice on centos 5.3 incompatibility
with merb-core and ruby 1.8.5
* [CHEF-259] - redhat service provider - correct use of chkconfig
* [CHEF-260] - yum provider remove_package without version broken
* [CHEF-261] - yum provider depends on ‘json’ which is not
available for Python 2.4
* [CHEF-271] - rpm packaging - executable examples
* [CHEF-276] - server.rb log_location truncation
* [CHEF-280] - recipes evaluated twice
* [CHEF-281] - Locale isn’t set properly during package
installation on Ubuntu 8.10 (at least)
* [CHEF-283] - “registrations” should be “registration’s”
* [CHEF-295] - chef-indexer throws fatal exception when processing
index/remove messages
* [CHEF-296] - limiting openid providers variable consistency
* [CHEF-297] - Failing specs for portage provider
* [CHEF-310] - yum provider - YumCache - refresh logic
* [CHEF-312] - FreeBSD user and group provider broken by CHEF-220
* [CHEF-320] - roles creation fails with an `each’ nil:NilClass error
* [CHEF-330] - Chef::Config[:solo] not being set in Solo runs
* [CHEF-331] - user provider - useradd.rb :manage_home confusion
* [CHEF-335] - dpkg_package resource does not work
* [CHEF-336] - Error when no tags set in create REST call
* [CHEF-339] - log file should be a string, got: #IO:0x7f0db9a68ad8
* [CHEF-342] - chef-server’s should include the server config file
* [CHEF-344] - gem_package resources failing to install packages
* [CHEF-345] - chef-client doesn’t automatically read
/etc/chef/client.rb anymore
* [CHEF-350] - chef-solo json attributes aren’t loaded
* [CHEF-353] - .rake_test_cache gets corrupt

** Improvement
* [CHEF-116] - Require authentication for the entire Chef Server
* [CHEF-122] - Notifies should be able to send different actions
to different resources, perhaps through a hash
* [CHEF-151] - Refactor application CLI logic to a seperate class
so it can be tested
* [CHEF-215] - Speedup of package provider (at least, for Gentoo)
* [CHEF-225] - Routing provider needs extended to manage configuration files
* [CHEF-243] - Search results in recipes & chef server return a
flattened hash. It should return, or be able to return, a
non-flattened hash, with all field names intact.
* [CHEF-251] - chef-server should run from gems without requiring
config file modifications within the gem directories.
* [CHEF-268] - Config files should be able to be passed into
chef-client as http resources
* [CHEF-272] - include contrib/ in gems
* [CHEF-288] - service resource - supports and custom
stop/start/etc commands
* [CHEF-302] - chef-server authentication requirement should link
to information on securing openid
* [CHEF-317] - Last Check in relative time ago
* [CHEF-323] - yum provider - improve failure output
* [CHEF-325] - cookbook not found error message is not helpful for
metadata uptake
* [CHEF-327] - Package providers shoud have an options attribute
to pass verbatin to underlying commands
* [CHEF-329] - more useradd home directory fun
* [CHEF-332] - Deleting a node via the web-ui pops up an error
message, though the deletion is successful
* [CHEF-346] - Update 0.7.0 for new rake task to test templates
and cache tests
* [CHEF-347] - cleanup - chef/provider/remote_directory.rb do_recursive_old
* [CHEF-354] - chef-repo should have config/chef_upgrade.json

** New Feature
* [CHEF-131] - Add a flag to chef-client to re-read JSON attribute
file each time it wakes up (in conjunction with
* [CHEF-220] - Interface Provider
* [CHEF-226] - the group resource doesn’t allow you to add or
remove users from the group, just explicitly set them.
* [CHEF-232] - determine if a recipe has been seen / included on a node
* [CHEF-265] - Add support for MacPorts on OS X as a package provider
* [CHEF-275] - Cookbook Meta-data Generator
* [CHEF-284] - Role support
* [CHEF-306] - We should only ship the set of cookbooks needed to
build a node to the edge
* [CHEF-337] - Update skeleton repository for Chef 0.7.0


Opscode, Inc.
Adam Jacob, CTO
T: (206) 508-4759 E: