How to use hand-written cookbooks when using berkshelf in chef?

berkshelf, chef-infra, vagrant

Solution

The `vagrant-berkshelf` plugin and Berkshelf in general is very cookbook-centric. Chef, however, is cookbook-repo centric. Installing the `vagrant-berkshelf` plugin encourages you to use the cookbook-centric approach, treating each cookbook like its own software project.

You need to add each of the cookbooks in your `cookbooks` directory to your Berksfile. There are a couple of approaches here:

If you only need one or two cookbooks, just add them using the Berkshelf path location:

cookbook 'bacon', path: '~/cookbooks/bacon'

If you want all your cookbooks, you can leverage Ruby here. A little-known secret is that the `Berksfile` is executed as Ruby, so you can loop and be magical:

Dir['/Users/sethvargo/cookbooks/**'].each do |path|
  cookbook File.basename(path), path: path
end

That will load each cookbook in that directory into your Berksfile (and thus Berkshelf)

Sources:

- I'm a core committer to the Berkshelf project

- I worked for Chef at the time of this post :)

Problem

I'm using vagrant+chef. My chef cookbooks worked perfectly. Then I installed vagrant-berkshelf plugin and from that moment I could not use own cookbooks. Berkshelf overrides cookbooks directory and chef does not see my cookbooks when I use them. My config is like this: ``` config.berkshelf.enabled = true config.vm.provision :chef_solo do |chef| chef.add_recipe "qbaka-frontend" end ``` With this configuration chef works only with cookbooks specified in `Berksfile` but can't see my cookbooks in `cookbooks` directory. How can I work simultaneously with my & Berkshelf's cookbooks?

Original source