Cookbookマネージャと一緒に

この項目内では3rdパーティーおよび自家製のCookbookの両方をマネージャで管理する前提にしています。

Berkshelf

berks vendorコマンドを割り込みに指定します。

coobook_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

Berkshelfとほぼ一緒です。コマンドはbatali updateで読みかえます。

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

参考: librarian-chef#knife-integration

Gemfileにlibrarian-chefを追加してbundleします。

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

knife.rbcookbook_pathを次のようにして下さい。

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

例えば、Chef−Repoのルートにknife.rbを置いている環境なら次のように記述します。

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

設定後、knife実行時にCheffile and Cheffile.lock are out of sync!が出る場合、次のどちらかで解決しましょう。

Policyfile

こちらです

Fork me on GitHub