前提
必要なファイルをインストール
今回の環境は以下のとおりです。(MacOSX)
VirtualBox 4.2.18 r88780
Vagrant 1.3.4
Ruby 2.0.0p247
Bundler 1.3.5 (Ruby Gems)
- VirtualBox => https://www.virtualbox.org/wiki/Downloads
- Vagrant => http://downloads.vagrantup.com/
- Ruby => rbenvやrvmなんでもいいので1.9以上を入れるといいと思います
- bundler(Ruby Gems) => 「gem install bundler」としてbundlerを入れる
初期ディレクトリ
/tmp以下を今回の作業環境とする。以下のディレクトリ構成を作る。
/tmp
└── vagrant-test
└── chef-repo
BundlerによるBerkshelfを使ってVagrantのセットアップ
bundleのinitまで
% cd /tmp/vagrant-test/chef-repo
% bundle init
bundle_initで生成されたGemfileを編集
% vi Gemfile
source "https://rubygems.org"
gem "knife-solo", "~> 0.3.0"
gem "foodcritic"
gem "berkshelf"
gem "serverspec"
gem "awesome_print"
bundleを実行
% bundle install --path vendor/bundle --binstubs vendor/bin
berkshelfのイニシャライズ(途中でGemfileのコンフリクトでどうするか求められるが、「n」でスキップして進める)
% bundle exec berks init
create Berksfile
create Thorfile
create .gitignore
run git init from "."
conflict Gemfile
Overwrite /private/tmp/vagrant-test/chef-repo/Gemfile? (enter "h" for help) [Ynaqdh] n
skip Gemfile
create Vagrantfile
Successfully initialized
berk_initで生成された不要なファイルを削除
% rm Thorfile <= とりあえずthorは使うことがないので削除
「Vagrantfile」は以下のとおりにする。(Centosのバージョンなどは適宜合わせて下さい)
% vi Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.hostname = "chef-repo-berkshelf"
config.vm.box = "centos6.5-x86_64-minimal_20131205"
config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"
config.vm.network :private_network, ip: "192.168.33.100"
config.vm.boot_timeout = 120
end
その他、Vagrantfileの設定でデフォルトで有効になっている箇所はvagrant-berkshelfプラグインの設定やvagrantのprovisioningの設定なので、ここでは使用しないため無効化している。適宜必要があれば有効化して下さい。
vagrant起動
vagrant upすると「config.vm.box」に指定したBoxをダウンロードしてVMを起動してくれる
% vagrant up
…
simply run `vagrant up`. <= 起動完了
vagrant接続確認
vagrantのボックスが追加されていることを確認
% vagrant box list
Berkshelf-CentOS-6.4-x86_64-minimal (virtualbox)
VMのステータスを確認
% vagrant status
Current machine states:
default running (virtualbox)
vagrantコマンドでSSH接続
% vagrant ssh
ssh接続用のコンフィグファイルを作成して、sshコマンドでログインしてみる
% vagrant ssh-config --host myapp-test >> ./myapp_sshconfig
% ssh -F ./myapp_sshconfig myapp-test
以上、SSHコマンドでの接続確認ができれば、Berkshelf init から Vagrantの設定まで完了です。
Chef(knife-solo)のセットアップ
先ほど立ち上げたvagrantのVMをホストにknife-soloのセットアップ
% cd /tmp/vagrant-test/chef-repo/
必要があれば実行する( knife-soloの共通設定「~/.chef/knife.rb」 を作るためのコマンド。すでにファイルがある場合はこの手順はスキップする)
% bundle exec knife solo conifigure
ディレクトリ構成を初期化
% bundle exec knife solo init .
VMホストにchefの設定を初期化する
% bundle exec knife solo prepare -F ./myapp_sshconfig myapp-test
berkshelfでサードパーティのyumクックブックを定義する
% vi Berksfile
site :opscode
cookbook "yum"
サードパーティのクックブックをインストール
% bundle exec berks install --path cookbooks
yum クックブックがダウンロードできていることを確認
% ls -ls ./cookbooks/
以上でknife-soloのセットアップ完了
knife-soloでクックブックを実行する
ここでは先ほどberkshelfでインストールしたyumのサードパーティクックブックの中のepelを入れようと思います。
jsonファイルにyum::epelクックブックを指定する
% cd /tmp/vagrant-test/chef-repo/
% vi ./node/myapp-test.json
{"run_list":[
"recipe[yum::epel]"
]
}
knife_soloを実行する
% bundle exec knife solo cook -F ./myapp_sshconfig myapp-test
以上でepelのyumリポジトリがVMのホストにインストールされていると思います。
残りはberkshelfでその他サードパーティのクックブックを入れたり、site-cookbooks以下に独自のクックブックを作ったりしてよしなにvagrantのVMを使い倒せます!