
おそらく、私は全体のコンセプトを間違えたのでしょう。Ubuntu 12.04 で動作する Vagrant VM があり、その上にいくつかのパッケージと設定ファイルをインストールしたいと考えています。それらは Chef で設定されており、cookbooks/my_project/recipes パスに、すべての手順を含む vagrant-dev.rb ファイルがあります。ここで問題となっているのは、Vagrantfile の Vagrant 設定に違いありません。
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks/my_project/recipes"
chef.add_recipe "vagrant-dev.rb"
end
VMをロードすると
FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.
最後に .rb を付けずに試してみました。これはまったく別の問題で、正しい使い方をしていないのだと思います。しかし、検索しても、適切なやり方を説明しているものは見つかりませんでした。
答え1
シェフを使用すると、すべてのレシピしなければならない料理本に載っているはずです。すでに料理本に載っていて、単に間違っているだけかもしれませんが、すべて説明しますので、もう一度確認してください。
クックブックは文字通り、レシピ rb ファイル、メタデータの一部、およびオプションでその他のファイル (テンプレートやデータバッグなど) のコレクションです。したがって、.rb ファイルを直接含めることはできません。クックブックを参照し、次にファイル名 (.rb なし) を指定して実行する必要があります。
シンプルなクックブックの構造は次のようになります。
SomeCookbook
readme.md # needed for the long_description in metadata to work
metadata.rb # contains the actual information for the cookbook
recipes # Holds all the cookbook's recipies
default.rb # This is the default recipe, run if one isn't specified
otherRecipe.rb
templates # Templates that can be called by the cookbook
default
some-erb-style-template.erb
メイン ディレクトリの名前は重要ではなく、テンプレート ディレクトリはオプションです。
metadata.rb
name "SomeCookbook"
maintainer "Me"
maintainer_email "[email protected]"
license "None"
description "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version "0.0.1"
supports "centos"
上記の構造に従い、レシピをレシピ フォルダーに必ず保存してください。
次に、これを Vagrant ファイルに追加します。
chef.add_recipe "SomeCookbook::vagrant-dev"
上記で少しは物事が明確になったと思います。