2016-04-02 22 views
0

私はルートプロジェクトにもVagrantfileを持つcookbooksフォルダを持っています。 私は唯一のカップルの料理本を持っています(スターターは"apt"に依存し、データベースはmysqlに依存しています)。これらの料理本は、berks cookbookで生成されました。迷惑メールBerkshelf berksfile_path

今の問題は、それがVagrantfileにconfig.berkshelf.berksfile_pathを設定するために来るとき./cookbooks/starter/Berksfileまたは./cookbooks/database/Berksfile置く場合、私は知らないですどちらの料理本もberksの依存関係を持っているからです。

私はベンダーがを../../cookbooksが、第2のベンダは料理が上書きしてしまい、生成するので動作しませんでした料理-srcのにこれらの料理本を移動し、それらのそれぞれを反復処理し、バークスを実行するように複数のオプションを試してみました前回のもの。

./cookbooks/the-cookbook/cookbooksにも各Cookbookの依存関係をベンダーで試してみましたが、迷路はそれらを認識しません。 =================================

Vagrant.configure(2) do |config| 
    config.vm.box = "ubuntu/trusty64" 
    config.vm.hostname = "chef-DK" 

    config.vm.provider "virtualbox" do |v| 
    v.customize ["modifyvm", :id, "--cpuexecutioncap", "67"] 
    v.memory = 537 
    end 

    config.berkshelf.enabled = true 
    config.berkshelf.berksfile_path = "./cookbooks/starter/Berksfile" 
    config.vm.provision :chef_solo do |chef| 
    chef.install = false 

    chef.run_list = [ 
     'recipe[starter::default]', 
     'recipe[database::default]' 
    ] 
    end 
end 

project/ 
├── cookbooks/ 
│ ├── database 
│ │   ├── recipes 
│ │   ├── Berksfile 
│ │   └── metadata.rb 
│ └── starter 
│    ├── recipes 
│    ├── Berksfile 
│    └── metadata.rb 
└── Vagrantfile 

これは私の浮浪者ファイルです===========スタータ/ metadata.rbの

コンテンツ:

name    'starter' 
maintainer  'YOUR_NAME' 
maintainer_email 'YOUR_EMAIL' 
license   'All rights reserved' 
description  'Installs/Configures starter' 
long_description 'Installs/Configures starter' 
version   '0.1.0' 

depends 'apt', '~> 3.0.0' 

コンテンツスターター/ Berksfile:

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

metadata 

cookbook 'apt', '~> 3.0.0' 

===========================

内容データベース/ Berksfileの

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

depends 'mysql', '~> 6.0' 

内容:データベース/ metadata.rbの

私はberkshelf metadata命令が料理metadata.rbを読み込むことを明らかにしたいすべての
source "https://supermarket.chef.io" 

metadata 

cookbook 'mysql', '~> 6.1.3' 
+0

あなたの 'Berksfile'と' depends'の出力を 'metadata.rb'ファイルに追加できますか?珍しい依存がないことを確認するだけです。おそらく、他の2つのCookbookを含む別の3番目のBerksfileを作成する必要があります。 – zuazo

+0

あなたが主な質問にあなたが要求したものを追加しました。 私は、これらのcookbookのカップルがあるルートフォルダにberksfileを追加しようとしましたが、その後、berksfileの隣にmetadata.rbが存在しないと不平を言うでしょう。 私は実際に動作する回避策を試しましたが、私が探しているものではありません。私はちょうど私の初心者/ berksfileにデータベースのcookbookへの依存関係をpath属性で入れて、データベース/ berksfileのすべての依存関係をstarter/berksfileと最後にvendor starter cookbookに移動しますが、これは実際には私が探しているものではありません私が望むように働く。 –

答えて

0

ファースト(すなわち、あなたのcookbookのエントリはです。Berksfile sは冗長です)。あなたのケースでは

あなたがメインプロジェクト/以下の内容で(次のあなたのVagrantfileへ)ディレクトリにBerksfileを作成することができます。

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

cookbook 'database', path: 'cookbooks/database' 
cookbook 'starter', path: 'cookbooks/starter' 

そしてあなたVagrantfileに追加

config.berkshelf.berksfile_path = './Berksfile' 

あなたの問題はあなたがアドインあなたの迷惑なBerksfileにmetadata命令があります。そのため、には「metadata.rbがありません」エラーが発生しています。

+0

は、5つのファイルの内容がここにあるので、あなたが "考えている"ものが何であるか分かりません。 tipに感謝します。私はberksfile intを追加しました。彼はrootの隣にrootを置くことができましたが、metadata.rbについてはまだエラーが表示されます。 cookbookへの相対パスを教えてくれてありがとう。 私は回避策があると思いますが、実際の解決策ではありません。誰かがこれをテストできるなら、私はそのような小さなテストですか? berksの依存関係を持つ2つのcookbookをそれぞれ作成し、それに迷惑メールボックスをプロビジョニングしてみてください。それはちょうど仕事を失う。 –

+0

私はあなたの質問に答える前にこれをテストし、うまくいきました。たぶん私は自分自身を正しく説明していないでしょう。私は、バージョン1.6.5の迷惑行為バージョン、バージョン4.3.0のバークシェルフ、バージョン4.1.0のヴァリアント・バーシェルフを使用しています。私が意図したことは、* root * Berksfileを使用しようとしたときに、あなたは 'metadata'命令を追加したので、* metadata.rb *に関するエラーが発生している可能性があります。 'metadata'命令を追加しないと、* metadata.rb *が必要であると不平を言うことはありません。 – zuazo

+0

空のmetadata.rbファイルを用意する必要があります。試してみる。 –

関連する問題