[chef] Re: RE: Re: RE: Re: berkshelf gem listed as a requirement in cookbook gemfile


Chronological Thread 
  • From: Torben Knerr < >
  • To: " " < >
  • Subject: [chef] Re: RE: Re: RE: Re: berkshelf gem listed as a requirement in cookbook gemfile
  • Date: Mon, 5 Jan 2015 19:03:22 +0100

Few inline comments below

On Mon, Jan 5, 2015 at 4:57 PM, Nico Kadel-Garcia
< >
 wrote:
>> -----Original Message-----
>> From: Tensibai Zhaoying 
>> [mailto:
>> Sent: Friday, January 02, 2015 5:21 PM
>> Cc: 
>
>> Subject: [chef] Re: RE: Re: berkshelf gem listed as a requirement in 
>> cookbook
>> gemfile
>>
>> Why the hell would you do a bundle install on a node ?
>>
>> Berkshelf is of use on your workstation to create a pack of cookbooks with
>> correct versions to distribute as tarball or to upload to chef-server.
>
> Or using it under chef-solo to pull and apply on the local host.
>
>        cd /var/chef-solo
>        git pull [ designated git repo, tag, branch, etc., etc. ]
>            [ Modify locally in testable environments ]
>            [ Or checkout out git tag for production ]
>        berks install
>        berks vendor
>            [ Consistent Berksfile.lock allows use of hard-coded cookbook 
> versions, including rollback to previous version without touching upstream ]
>        chef-solo [ with configuration that looks in 
> /var/chef-solo/berks-cookbooks ]
>           [ test ]
>           [ Record git changes ]
>           [ Push git changes back upstream ]
>
> 'Deploy from tarball' involves maintaining tarballs and an available server 
> to deploy them from, and potentially pushing tarballs from a development 
> server to the chef server, which raises serious management and security 
> concerns. This also gets really hairy when older cookbooks are incompatible 
> with newer cookbooks or different chef releases, and some servers need one 
> or the other. Recent architectural changes in the yum and mysql cookbooks 
> are good examples where the chef server, itself, might need to have 
> multiple cookbooks for multiple categories of servers. And Berksfile and a 
> chef server do not trivially support deploying multiple cookbook versions, 
> especially legacy ones that have not historically been deployed on that 
> chef server. And they break *horribly* when different versions of the same 
> numbered cookbook are in use on two development  hosts with the same chef 
> server or the same "tarball building setup" as you mentioned, which happens 
> when two different people are working on different parts of the same 
> cookbook at the same time in the same chef server environment.
>

That's my workflow as well, except that I'm not bundle installing it
*on* the node, but rather from the outside. If that is a desired
scenario for you then Vagrant is a perfect fit.

Example here: 
https://github.com/tknerr/sample-toplevel-cookbook/blob/master/Gemfile


>> If your day to day workstation is a lightweight Vm you recreate often, 
>> include
>> chef-dk or do bundle install in the source template box...
>
> "Recreating vm's" is a surprisingly resource expensive operation in many 
> environments. It requires privileges to create VM's, and the sys-admin time 
> and resources to manage those privileges to prevent mistakes which may 
> corrupt critical resources. Being able to spin up  a VM or test environment 
> with only local git privileges and *no* chef server privileges is much 
> safer in many environments.
>
>> I don't see any use case where you would do a bundle install from a 
>> cookbook
>> dir within a chef run, you should install needed gems for a recipe with 
>> chef-gem
>> resource if you need it inside your recipes.
>
> Roles and node configurations and environments benefit from having 
> consistent, locked cookbooks especially between QA, staging, and production 
> environments. A "template box" is not good enough for production if you've 
> not recorded your chef changes, especially including cookbook versions, and 
> the 'Berksfile.lock' for chef-solo on individual test environments provides 
> that.
>
> There are trade-offs: you can't use "search" functions as you might on a 
> chef server. But for many test environments, testing on a single chef-solo 
> instance and then propagating it to the relevant staging or production 
> environment is quite useful.
>

You can use chef-zero though which is almost a drop-in replacement for
chef-solo, especially when using Vagrant (simply replace the
:chef_solo with the :chef_zero provisioner). This will give you more
chef-client like behaviour and especially lets you use search as with
chef server.

Cheers,
Torben


>> Please enlight me if I missed your point...
>
> I'm happy to do so: see above.
>
>
> Nico Kadel-Garcia
> Lead DevOps Engineer
> 
>
>
>
>
>



Archive powered by MHonArc 2.6.16.

§