2016-03-28 16 views
2

ローカルでいくつかの設定を適用するために、私のワークステーションでシェフ・ソロを実行しようとしています。私のレシピは、metadata.rbとBerksfileの両方で指定したいくつかの外部の料理本に依存しています。 chef-clientの実行に失敗し、以下のエラーメッセージが表示されます。シェフ・ソロ・クックブックの依存関係を解決する

chef-soloを実行しているときに依存関係を自動的にダウンロードする方法があるかどうかを知りたいのですが?

[email protected]:~/chef-solo$ chef-solo -c solo.rb -j solo.json 

Starting Chef Client, version 12.8.1 
Installing Cookbook Gems: 
Compiling Cookbooks... 

Running handlers: 
[2016-03-28T16:32:36+00:00] ERROR: Running exception handlers 
Running handlers complete 
[2016-03-28T16:32:36+00:00] ERROR: Exception handlers complete 
Chef Client failed. 0 resources updated in 03 seconds 
[2016-03-28T16:32:36+00:00] FATAL: Stacktrace dumped to /home/user/chef-solo/chef-stacktrace.out 
[2016-03-28T16:32:36+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report 
[2016-03-28T16:32:36+00:00] ERROR: Cookbook apt not found. If you're loading apt from another cookbook, make sure you configure the dependency in your metadata 

solo.rb

root = File.absolute_path(File.dirname(__FILE__)) 
file_cache_path root 
cookbook_path root + '/cookbooks' 

solo.json

{ 
    "run_list": [ "recipe[test::default]" ] 
} 

Berksfile

source 'https://supermarket.chef.io' 

cookbook 'apt' 
metadata 

metadata.rb

name 'test' 
maintainer 'The Authors' 
maintainer_email '[email protected]' 
license 'all_rights' 
description 'Installs/Configures test' 
long_description 'Installs/Configures test' 
version '0.1.0' 

depends 'apt' 
+0

この質問をよく整形されたSOの質問に入れて、いい仕事をしてくれました。 – Ninjaxor

答えて

0

chef-soloには何も組み込まれていません。ダウンロード管理はchef-clientが処理するものの1つで、この機能を特に除外しています。しかし、​​を呼び出すラッパースクリプトを作成するのはかなり簡単ですし、そのフォルダーでchef-soloを狙ってください。

1

Berkshelfは、料理本の依存関係のインストールを自動化するためのシェフの世界で一般的なツールです(これについては、Berksfileがこれに関連しています)。まだインストールされていない場合は、berkshelfをインストールします。シェフはあなたが依存関係を入れたいところだあなたsolo.rbファイル内

$ gem install berkshelf 

お知らせ...

cookbook_path root + '/cookbooks' 

を言うライン...。 Berkshelfがなければ、そのcookbooksフォルダにaptをインストールするためにナイフを使う必要があります。

$ knife cookbook site install apt 

:(注料理は/ ... Gitのレポでなければなりません)しかし、あなたはBerksfileを持っているので、あなたは可能性が...

あなたBerksfileが入っている同じフォルダに、以下のコマンドを使用したいと思います
$ berks vendor ../ 

これは、現在のフォルダの依存関係を親ディレクトリにインストールします。ルートcookbooksフォルダの場所に応じて別の場所を指定する必要があります。

Berksfileに1回、metadata.rbに1回、依存関係を2回指定する必要があるのか​​もしれません。私もそうです;)

関連する問題