[chef-dev] Re: Add "url" to depends/metadata ?


Chronological Thread 
  • From: Joseph Holsten < >
  • To: Peter Donald < >
  • Cc: Chef Dev < >
  • Subject: [chef-dev] Re: Add "url" to depends/metadata ?
  • Date: Fri, 16 Nov 2012 01:51:22 +0000

+1 almost identical to how we do it.

But we also tend to split up things within that role/application cookbook. So

--- mybiz-foo/recipes/default.rb ---
include_recipe "mybiz-foo::package"
include_recipe "mybiz-foo::ulimit"
include_recipe "mybiz-foo::service"
include_recipe "mybiz-foo::monit"
include_recipe "mybiz-foo::logrotate"
include_recipe "mybiz-foo::backup"
include_recipe "mybiz-foo::ganglia"
include_recipe "mybiz-foo::nrpe"

Each of those then includes the necessary recipes and/or resources from 
external cookbooks.

On 2012-11-15, at 12:38, Peter Donald wrote:

> On Thu, Nov 15, 2012 at 6:42 PM, Kevin Nuckolls
> < >
>  wrote:
>> I've always thought that include_recipe is an anti-pattern if you're
>> including recipes outside of the cookbook you're in.
> ...
> 
> While I can see how you have got to the place you are currently at, it
> is almost the exact opposite to where we are.
> 
> We started out using your approach but as roles are un-versioned or we
> wanted more complex logic in resolving our attributes between
> roles/environments/nodes we found ourselves engineered into a dead
> end. Our roles now all include one recipe, the so called "role
> recipe".
> 
> This role cookbook depends on all the cookbooks it uses and the role
> recipe includes them in a particular order. This allows us to have
> multiple versions of the role deployed. i.e. We could add a recipe to
> the role in version 2 of the role cookbook and roll it out to the
> development environment while version 1 is still present in the
> integration/uat/staging/production environments.
> 
> When we want complex resolution rules around attributes we can also
> put it in the role recipe rather than trying to navigate the attribute
> precedence rules.
> 
> All in all. The only value that the roles structure in chef provides
> us is the ability to identify top level cookbook/recipes that can be
> safely applied to a node.
> 
> Here's an illustrative example...
> 
> --- roles/foo.rb ---
> name "foo"
> description "Foo Server"
> run_list("recipe[mybiz-foo]")
> ----------------------
> 
> --- cookbooks/mybiz-foo/metadata.rb ---
> ...
> depends "ntp"
> depends "git"
> depends "foo"
> ----------------------
> 
> --- cookbooks/mybiz-foo/recipes/default.rb ---
> include_recipe "ntp"
> include_recipe "git"
> include_recipe "foo"
> ----------------------
> 
>> Maintainer_repo as a url within the metadata.rb is a good idea. But I think
>> the depends statement should take a git/url parameter so the dependency
>> chain is more explicit and less reliant on context and naming.
> 
> That is actually fairly interesting to us. But rather than a git URL I
> would prefer it to be a namespace that correlates to the namespace in
> community site when/if that ever happens.
> 
> -- 
> Cheers,
> 
> Peter Donald




Archive powered by MHonArc 2.6.16.

§