Configuration Management using chef is being implemented with the help of desire files, which is often called a “cookbooks” in chef. Usuallay separate cookbooks is written in practice for each module so its easy to maintain. Also, there are good numbers of cookbooks which is being used from community portal which is from supermarket.chef.io.
In order to meet the desire state in servers, once the multile cookbooks is used, Very often these cookbooks become large and highly interdependent, it becomes necessary to manage these cookbooks itself.
Berkshelf is the tool which makes ‘the management’ & dependency management between cookbooks easy. Berkshelf is a dependency manager for Chef cookbooks. With it, you can easily depend on community cookbooks and have them safely included in your workflow. Using Berkshelf, you need to package, bundle dependent cookbooks rather using it will download from “source” which is defined in Berksfile.
Berkshelf is included in the Chef Development Kit.
Quick Start
Running “chef generate cookbook” will, by default, create a Berksfile in the root of the cookbook, alongside the cookbook’s metadata.rb. As usual, add your cookbook’s dependencies to the metadata:
[code]name ‘my_first_cookbook’
version ‘0.1.0’
depends ‘apt’, ‘~> 5.0′[/code]
The default Berksfile will contain the following:
[code]source ‘https://supermarket.chef.io’
metadata[/code]
Now, when you run “berks install“, the apt cookbook will be downloaded from Supermarket into the cache…
[code]$ berks install
Resolving cookbook dependencies…
Fetching ‘my_first_cookbook’ from source at .
Fetching cookbook index from https://supermarket.chef.io…
Installing apt (5.0.0)
Using my_first_cookbook (0.1.0) from source at .
Installing compat_resource (12.16.2)[/code]
Example of Berksfile
[code]source “https://supermarket.chef.io”
metadata
cookbook ‘zabbix-agent’, path: ‘cookbooks/zabbix-agent’
cookbook ‘hostnames’, path: ‘cookbooks/hostnames’
cookbook ‘chef-client’, path: ‘cookbooks/chef-client’
cookbook ‘rethinkdb’, path: ‘cookbooks/rethinkdb’
cookbook ‘zookeeper’, path: ‘cookbooks/zookeeper’
cookbook ‘logstash’, path: ‘cookbooks/logstash’
cookbook ‘kafka’, path: ‘cookbooks/kafka’
cookbook ‘elasticsearch’, path: ‘cookbooks/elasticsearch’
cookbook ‘testbook’, path: ‘cookbooks/testbook’
cookbook ‘base-ubuntu’, path: ‘cookbooks/base-ubuntu'[/code]
Important Notes
For new users, we strongly recommend using Policyfiles rather than Berkshelf. Policyfiles provide more predictability, since dependencies are only resolved once, and a much improved way of promoting cookbooks from dev to testing, and then to production. Note that Policyfile is not supported as part of a Chef Automate workflow.
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND