Chef と指示が書かれた .rb ファイルを使用して Vagrant VM をプロビジョニングする方法

Chef と指示が書かれた .rb ファイルを使用して Vagrant VM をプロビジョニングする方法

おそらく、私は全体のコンセプトを間違えたのでしょう。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"

上記で少しは物事が明確になったと思います。

関連情報