Chef を使ってみる その1
先日のVagrantのエントリー内でちょっと触れたChefを試してみます
Chefとは
—
[Chef](http://wiki.opscode.com/display/chef/Home)
[Chef でサーバ管理を楽チンにしよう!|るびま](http://jp.rubyist.net/magazine/?0035-ChefInDECOLOG)
Rubyで作られたサーバの構成管理ツールです
いろんなサーバにapacheとか入れたり設定ファイルも配置しちゃったりできるようです
これで下記みたいな時に幸せになれるのかもしれません
* 特定のサーバだけ設定がもれてて動かなかった!
* あのサーバだけライブラリのバージョン違うじゃねぇか!!
* 100台サーバあるけど、apacheのバージョン更新しといて
ただ、ChefにはServerやらClientやらNodeやらRoleやらいろんな考えがあって、
最初から完璧にやろうと思うと必ず失敗します。
自分もすでに数回目(笑)
今回はVagrantで使うことを目的としていますので、chef-soloだけで試そうと思います
最終的には開発用のVirtualBoxと公開用サーバでアプリとか設定とかを統一していきたいです
インストール
—
Rubyは入っているという想定です
“`
gem install chef
“`
これだけでOk
Chefに関する設定ファイルを作成
—
下記のコマンドを実行して設定ファイルを作成します
“`
$ knife configure
“`
設定ファイルの置き場所とかが聞かれると思うので $HOME/.chef/ にしてみましょう
ファイルの設定が終わったら、~/.chef/knife.rbにcookbookの保管場所を設定します
“` ruby
cookbook_path ‘~/.chef/cookbooks/’
“`
レシピ作成
—
…ここではレシピと言うべきなのかクックブックと言うべきなのか
インストールするもの毎に作るのが慣習ぽいです
apacheならapacheだけ。PHPとかでライブラリを入れる場合は一緒でもいいのかな?
今回は単に静的ファイルを1つ置くだけのレシピを書いてみましょう
“`
$ knife cookbook create static_file
“`
cookbook_path以下にstatic_fileというディレクトリが出来ているはずです
ここがstatic_fileレシピに関する情報をまとめるディレクトリになります
### レシピディレクトリの中身
* attributes
* definitions
* files
* libraries
* providers
* recipes
* resources
* templates
8つのディレクトリと
* metadata.rb
* README.md
2つのファイルがあります
今回は静的ファイルを置くだけなので、recipesとfilesディレクトリ以外は消しておきます
### ファイルを置いてみる
ファイルの扱いに関しては[ここ](http://wiki.opscode.com/display/chef/Resources#Resources-CookbookFile)を参考にしています
ファイルを置くのは簡単で
1. files以下に置きたいファイルを置く
2. recipes/default.rbに cookbook_file メソッドでファイルを指定
といった感じです。
実際にやってみます
files 以下にsample.txtを作る
recipes/default.rb に以下のようにファイルを配置したいパスを指定
“` ruby
cookbook_file ‘/tmp/sample.txt’ do
mode ‘0644’
end
“`
これでレシピの作成は完了
ではこのレシピをVagrantで利用してみましょう
Vagrantfileの途中にchef-soloの記述があるのでその部分を以下のように変更します
“` ruby
Vagrant::Config.run do |config|
# 中略
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = “~/.chef/cookbooks”
chef.add_recipe “static_file”
end
end
“`
あとはVagrantから仮想マシンを立ちげれば反映されてるはずです
“`
$ vagrant up # すでに起動済みの場合はvagrant reload
“`
その後以下のコマンドでファイルがあるかを確認してみましょう
“`
$ vagrant ssh
$ ls /tmp/sample.txt
“`
ファイルはちゃんと配置されたでしょうか?
まだここだと嬉しさわからないと思うので次回はテンプレートを使って値の書き換え等を行うのを確認したいと思います