Chef 0.7.12rc0 / Ohai 0.3.4rc0 release(s)

Hi all,
It’s that time again! Today I’m pleased to announce the release
candidates of Chef 0.7.12 and Ohai 0.3.4.

I hope you’ll take the time to test both releases on a development
snapshot of any production infrastructure, and report bugs towards the
0.7.12 and 0.3.4 projects on JIRA. I’ve tentatively scheduled the
release of 0.7.12 and 0.3.4 final for later this week.

The MVP for this release is Diego Algorta; He has supplied us with the
ability for Ohai to detect (CHEF-293) the correct english-based Locale
for every Linux system, and use this information while parsing system
commands used internally in Chef. A tricky bug to resolve, this fix
returns the ability for Chef and Ohai to be used on systems where a
non-english installation was used.

We’ve had a staggering number of contributions this cycle and
considerably increased our speed and stability. New features worth
noting are the completion of Lightweight Resources and Providers, and
the Deploy and SCM resources.

LWR/P:

Wiki Documentation Page

Lightweight Resources and Providers allow the seasoned cookbook author
to build standard Chef resources and providers via a lightweight
cookbook based DSL. Cookbooks gain two new optional directories for
this feature, ‘resources/’ and ‘providers/’. We’re expecting the
emergence of lightweight resources and providers to almost entirely
replace the usage of definitions, which are used currently throughout
cookbooks as global macros.

Cookbook Layout

cookbooks/lwrp/providers/default.rb
cookbooks/lwrp/recipes/default.rb
cookbooks/lwrp/resources/default.rb
This will build the following resources and providers:

Chef::Resource::Lwrp
Chef::Provider::Lwrp
Without reproducing too much from the existing documentation, a few
examples:

cookbooks/lwrp/resources/default.rb

actions :print_message, :touch_file

attribute :message, :kind_of => String
attribute :filename, :kind_of => String
cookbooks/lwrp/providers/default.rb

action :print_message do
puts new_resource.message
end

action :touch_file do
file “#{node[:tmpdir]}/#{new_resource.filename}” do
action :create
end
end
cookbooks/lwrp/recipes/default.rb

lwrp “foo” do
message "Default everything"
action :print_message

provider Chef::Provider::Lwrp
end

lwrp “bar” do
filename "/tmp/foo"
action :touch_file

provider Chef::Provider::Lwrp
end
Deploy / SCM Resources

Wiki Documentation Page

The chef-deploy project written originally by Ezra Zygmuntowicz to
bring Capistrano-strategy deployment to Chef has been ported to Chef
proper. The SCM functionality has additionally been extracted into Git
and Subversion resources. I’m increasingly excited by the prospects
opened by having deployment and scm functionality available as first
class citizens in Chef, and hope we can continue to offer more
enhancements such as alternate (cough Heroku) deploy strategies.

I believe a few examples will speak for themselves:

CouchDB from SCM?

subversion “CouchDB Edge” do
repository "http://svn.apache.org/repos/asf/couchdb/trunk"
revision "HEAD"
destination "/opt/mysources/couch"
action :sync
end
Prefer git?

git “/opt/mysources/couch” do
repository "git://git.apache.org/couchdb.git"
reference "HEAD"
action :sync
end
Fancy deploying a rails app with a custom application layout and in-
line Chef resource deployment hooks? No problem!

deploy “#{node[:tmpdir]}/deploy” do
repo "#{node[:tmpdir]}/gitrepo/typo/"
environment “RAILS_ENV” => "production"
revision "HEAD"
action :deploy
migration_command "rake db:migrate --trace"
migrate true

symlinks “system” => “public/system”, “pids” => “tmp/pids”, “log”
=> “log”

Callbacks

before_migrate do
current_release = release_path

 directory "#{current_release}/deploy" do
   mode "0755"
 end

 # creates a callback for before_symlink
 template "#{current_release}/deploy/before_symlink_callback.rb" do
   source "embedded_recipe_before_symlink.rb.erb"
   mode "0644"
 end

end

This file can contain Chef recipe code, plain ruby also works

before_symlink “deploy/before_symlink_callback.rb”

restart do
current_release = release_path
file “#{release_path}/tmp/restart.txt” do
mode "0644"
end
end

end
Release Notes – Chef – Version 0.7.12rc0
Bug

[CHEF-293] – Chef breaks on systems with non-English Locales
[CHEF-501] – Fails to follow notification chains
[CHEF-534] – remove execute permissions from javascripts, images, etc.
[CHEF-544] – Service provider fails to set @new_resource.updated
[CHEF-562] – typo in provider/ifconfig.rb
[CHEF-569] – Remote File causes updates to be sent regardless of
idempotency
[CHEF-578] – Lots of files/subdirectories in a remote_directory cause
most chef requests to take 11.5 seconds, and the merb process goes up
to 100% CPU
Improvement

[CHEF-503] – cookbooks UI should display the relative path of the
template
[CHEF-546] – Make couchdb version switcher 0.8 specific, and use the
new format for everything else.
[CHEF-559] – distro/ should be under ‘chef’ dir and packaged w/ gem.
[CHEF-560] – refactor Chef::Provider::Group::Groupadd
[CHEF-561] – Flexible application layouts for deploy resource and
provider
[CHEF-566] – Deploy resource/provider callbacks for before_migrate,
&etc. should support in-line recipes
[CHEF-568] – Increase logging for Remote File status, including
checksummation.
[CHEF-580] – faster find_preferred_file
[CHEF-582] – group resource should allow users or members as a parameter
New Feature

[CHEF-145] – Cron resource: add support for setting cron environment
variables like MAILTO or PATH
[CHEF-419] – Create SCM resource and providers for git & svn
[CHEF-496] – add simple service provider to chef
Task

[CHEF-571] – LWRP unit tests
Release Notes – Ohai – Version 0.3.4rc0
Bug

[OHAI-107] – EC2 spec tests fails when not connected to network
[OHAI-111] – ec2 userdata gets truncated
[OHAI-112] – when installed on ubuntu/debian packages w/o rubygems,
ohai fails with a type error
[OHAI-122] – ohai on opensolaris 11 doesn’t properly detect os for
plugins
[OHAI-125] – fqdn not set on solaris
Improvement

[OHAI-95] – Support multiple JSON libraries
[OHAI-116] – Redhat platform version should include the subrelease
[OHAI-120] – refactor ohai to use Mixlib
[OHAI-129] – Ohai on Solaris should produce gloriously verbose output
about kernel modules
New Feature

[OHAI-113] – Add support for OpenBSD
[OHAI-114] – Add support for NetBSD


Arjuna Christensen, Software Development Engineer
Opscode, Inc.
E: aj@opscode.com