[chef] Re: OS Specific Recipes


Chronological Thread 
  • From: Bryan McLellan < >
  • To:
  • Subject: [chef] Re: OS Specific Recipes
  • Date: Tue, 6 Dec 2011 18:11:44 -0500

On Tue, Dec 6, 2011 at 5:20 PM,  
< >
 wrote:
> I was just curious why you gave the ability to provide multiple versions of 
> the
> same file or template for different OS's (File Specificity), but not for
> recipes.

To build on what Andrea Camp said, a good practice is to keep as much
logic out of templates as possible and put it in recipes. If you're
installing from upstream packages, you're likely going to have a
different configuration file for each distribution and release because
they have different versions of the package. In this case you can copy
the default configuration files in and use file specificity to choose
which to use. Then you edit the templates where you need to fill in
values and provide those values using the same variable names in the
template resource in the recipe. If you're filling in a field this way
and the source of the field changes, you only have to change that once
in the recipe rather than in every template. The templates are much
easier to read and work with this was as well.

The recipes really shouldn't differ significantly between different
OS's. This is the goal of abstracting away the tedious bits with
resources like package. If the package name happens to be different,
the package resource doesn't need to be changed except for that one
value.

mysql_service_name = value_for_platform([ "centos", "redhat", "suse",
"fedora", "scientific" ] => {"default" => "mysqld"}, "default" =>
"mysql")

some_package = value_for_platform(
    ["centos", "redhat", "suse", "fedora", "scientific" ] =>
{"default" => "something_red"},
    ["ubuntu", "debian"] => { "11.10" => "something_special",
"default" => "something_canonical" }
)

package "cool thing" do
  package_name some_package
  action :install
end

template "/etc/some/config" do
  owner "root"
  group "root"
  source "config.erb"
  mode "0644"
end

This way you don't need to maintain duplicate copies of the recipe for
each operating system. If you need to do something else in this
recipe, you don't need to add those resources to multiple recipes to
have it affect all systems.

Bryan



Archive powered by MHonArc 2.6.16.

§