Cookbook Manager Integration

This usage assumes using cookbook manager to manage both 3rd parties cookbooks and self maintenance cookbooks.

Berkshelf

Set berks vendor to hooks.

cookbook_path [
  File.expand_path('../../berks-cookbooks', __FILE__)
]

knife[:before_bootstrap] = "berks vendor"
knife[:before_converge]  = "berks vendor"

## ex. under the bundler environment.
# knife[:before_bootstrap] = "bundle/chef exec berks vendor"
# knife[:before_converge]  = "bundle/chef exec berks vendor"

Batali

That is mostly the same as Berkshelf. Use batali install.

knife[:before_bootstrap] = "batali update"
knife[:before_converge]  = "batali update"

## ex. under the bundler environment.
# knife[:before_bootstrap] = "bundle/chef exec batali vendor"
# knife[:before_converge]  = "bundle/chef exec batali vendor"

Librarian

Ref: librarian-chef#knife-integration

Add librarian-chef to Gemfile, and bundle it.

gem 'knife-zero'
gem 'librarian-chef'

Stick the following in your knife.rb:

require 'librarian/chef/integration/knife'
cookbook_path Librarian::Chef.install_path,
              "/path/to/chef-repo/site-cookbooks"

For example. knife.rb in your chef_repo root.

require 'librarian/chef/integration/knife'
cookbook_path Librarian::Chef.install_path,
              File.expand_path("../site-cookbooks", __FILE__)

When you see Cheffile and Cheffile.lock are out of sync!, you should correct dependency below two ways.

Policyfile

Here

Fork me on GitHub