15

私はシェフが初めてで、バークシェルフとシェフクライアントで問題に遭遇しました。依存関係のある独自のクックブックを作成して適用したいと考えています。私の最初のクックブックは次のようになります。

.
├── Berksfile
├── Berksfile.lock
├── chefignore
├── client.rb
├── Gemfile
├── Gemfile.lock
├── metadata.rb
├── README.md
└── recipes
    └── default.rb

#./Berksfile
source 'https://supermarket.getchef.com'

metadata

cookbook 'znc'


#./client.rb
cookbook_path '~/.berkshelf/cookbooks'

そして、シェフクライアントを実行sudo bundle exec chef-client -z -o znc --config=client.rbするとクックブックが見つかりません:

Starting Chef Client, version 11.16.4
[2014-10-25T15:34:59+02:00] WARN: Run List override has been provided.
[2014-10-25T15:34:59+02:00] WARN: Original Run List: []
[2014-10-25T15:34:59+02:00] WARN: Overridden Run List: [recipe[znc]]
resolving cookbooks for run list: ["znc"]

================================================================================
Error Resolving Cookbooks for Run List:
================================================================================

Missing Cookbooks:
------------------
No such cookbook: znc

Expanded Run List:
------------------
* znc


Running handlers:
[2014-10-25T15:34:59+02:00] ERROR: Running exception handlers
Running handlers complete
[2014-10-25T15:34:59+02:00] ERROR: Exception handlers complete
[2014-10-25T15:34:59+02:00] FATAL: Stacktrace dumped to /home/sebastian/.chef/local-mode-cache/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 3.474758165 seconds
[2014-10-25T15:34:59+02:00] ERROR: 412 "Precondition Failed "
[2014-10-25T15:34:59+02:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

また、注意してください:

ls ~/.berkshelf/cookbooks 
build-essential-2.1.2  znc-0.0.1

クックブックが見つからない理由を教えてください。

編集:

素早い回答ありがとうございます。解決策は、John Bellone が言ったとおりで、構成を次のようにbundle exec berks vendor変更します。client.rb

# ./client.rb
cookbook_path File.dirname(File.expand_path(__FILE__)) + '/berks-cookbooks'
4

4 に答える 4

3

私は次のスクリプトを使用しています。これにより、スーパーマーケットのクックブックに依存するクックブックで git リポジトリを使用できますが、シェフ サーバーは必要ありません。以下の内容を、local-chef-clientcookboks dir と同じレベルで呼び出されるファイルに入れます。次に、たとえばローカル マシンを収束させることができ./local-chef-client "recipe[some::default]"ます。

#!/bin/bash
cmd="berks vendor -b $(pwd)/cookbooks/Berksfile"
pushd /tmp
rm -rf cookbooks
$cmd
mv berks-cookbooks cookbooks
sudo chef-client -z  -r "$@"
popd
于 2015-10-29T19:09:42.283 に答える