So whats the preferred method to use community cookbooks? Is it just download/untar/upload? Can chef-client use my metadata.rb and a Berksfile to just pull them at runtime?
add the community cook book to you Berksfile
source 'https://supermarket.chef.io'
metadata
cookbook 'iis', '~> 4.1.6'
cookbook 'windows', '~> 1.39.1'
cookbook 'dotnetframework', '~> 1.2.0'
cookbook 'msoffice', '~> 0.1.0'
cookbook 'firewall', '~> 2.5.0'
Then add a depends to your metadata.rb
depends 'dotnet', '~> 2.1.0'
depends 'dotnetframework', '~> 1.2.0'
depends 'iis', '~> 4.1.6'
depends 'firewall', '~> 2.5.0'
depends 'windows', '~> 1.39.1'
That should do it, hope that helps…
Hi Robert,
We have these main types of cookbooks
- Application
- Library
- Wrapper
- Environment
In most cases we add a dependency in the metadata.rb file and use Berkshelf to resolve the dependencies by setting the source to http://supermarket.chef.io (we actually run a private supermarket and a minimart).
Test kitchen detects the Berksfile which in turn resolves everything for us.
However there are some cases where we want a cookbook to be included in a Test Kitchen run but NOT to be a dependency of the Cookbook under test, in those cases we add those to just the Berksfile and include in the Test suite run list, e.g a line in the Berksfile similar to below
cookbook '<cookbook_name>', <location>
The cookbook location can be local file system or github.
Two points to note:
- Berksfile is treated as a Ruby file https://sethvargo.com/berksfile-magic/
- Berkshelf prefers to use local cached versions of cookbooks where possible
Hope this helps
Hi @kxmoss
NB: You do not need to add the cookbooks and versions in the Berksfile, the metadata line in the Berksfile pulls in the metadata.rb file and reads in the dependencies, it will try and get those using the sources defined in the Berksfile.
If your cookbook comes from a specific source you can use that instead, i.e.
source 'https://supermarket.chef.io'
metadata
cookbook 'really_cool_cookbook', git: 'https://github.com/cookbooks/really_cool_cookbook'
Berkshelf will look for a Berkshelf endpoint, currently I think that is a Berks API server (old), Supermarket, Minimart although I believe there are plans to make the Chef server a Berkshelf / universe endpoint too,
Ahh, nice, I did not know that, I always put it in the it in Berksfile…
The newer Chef servers work with Berkshelf using:
source :chef_server
Nathan Clemons
DevOps Engineer
Moxie Cloud Services (MCS)
O +1.425.467.5075
M +1.360.861.6291
E nclemons@gomoxie.com
W www.gomoxie.comhttp://www.gomoxie.com/