LoginSignup
80
80

More than 5 years have passed since last update.

最近の(2013/8/28時点の)vagrantとberkshelfの書き方

Posted at

vagrantとberkshelfで超捗る、みたいな記事は一杯あるんですが、その先のちょっと弄りたいってなった時に一瞬悩む。

コミュニティcookbookのattributesとかカスタムしたい。
自分で作ったcookbookのレシピも追加したい。

で、色々調べてみたんですが、run_listで呼ぶよりも、そのプロヴィジョニングしたい環境の名前のcookbookを新しく作って、依存対象となるコミュニティcookbookをmetadataに書き、include_recipeする方が良いんじゃないかと思いました。

既に、BerksfileとVagrantfileがあるものとします。
vagrant plugin install vagrant-berkshelfも完了済みと想定。

bundle exec berks cookbook ENV_NAME     # ENV_NAMEは各自読み替え

でcookbookを作ります。

BerksfileとVagrantfileはこんな感じに。

Berksfile
site :opscode

cookbook 'ENV_NAME', path: 'ENV_NAME'
Vagrantfile
  config.berkshelf.enabled = true

  config.vm.provision :chef_solo do |chef|
    chef.run_list = [
      "recipe[ENV_NAME]",
    ]
  end

で、ENV_NAMEのcookbookのmetadata.rbに依存するcookbookを書く。
場合によってはcookbookのバージョンも指定する。

metadata.rb
name             'ENV_NAME'
maintainer       'YOUR_NAME'
maintainer_email 'YOUR_EMAIL'
license          'All rights reserved'
description      'Installs/Configures createdb'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version          '0.1.0'

depends          'mysql'
depends          'database'
depends          'redisio'
depends          'imagemagick'

そして、ENV_NAMEのレシピを書く。

recipe/default.rb
include_recipe 'mysql::server'
include_recipe 'redisio::install'
include_recipe 'redisio::enable'
include_recipe 'imagemagick::devel'
include_recipe 'database::mysql'

mysql_connection_info = {
  host: 'localhost',
  username: 'root',
  password: node['mysql']['server_root_password'],
}

mysql_database 'development_db' do
  connection mysql_connection_info
  action :create
end

こんな感じ。
こうしておけば、コミュニティcookbookの値を使って、追加のレシピ作るのが楽になる。
この例だとattributesを書けば、ちゃんとmysql関連のパスワード設定も上書きできる。

実際、コミュニティcookbookを半端に使って中身を弄ると後からハイパー面倒になるので、
それはそのまま使って、必要な追加処理だけこうやって書くのが分かりやすいし管理もしやすいかなーと思いました。

そもそも、本当に本番環境のインフラとして使う場合は、コミュニティcookbookは余りお呼びでない事もあって、そういう場合は一部を除いてスクラッチで書いた方が良い気がします。

私のように開発者向けのテスト環境をVMでサクっと立てたい、という目的でとりあえずアプリが動く構成を作る場合には便利です。

80
80
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
80
80