Bibliotecário-chefを 使 い 、 bundler の よ う に 必要 な livro de receitas を 管理 す る。
Chef の セ ッ ト ア ッ プ
毎 度 つ か う う も の な の で 、git clone
一 発 で chef-cliente 系 を セ ッ ト ア ッ プ 出来 る よ う に し た。
Ubuntu: https://github.com/higanworks/chef-with-ruby_precise-x86_64
CentOS: https://github.com/higanworks/chef-with-ruby_CentOS-x86_64
セ ッ ト ア ッ プ は LEIA-ME に あ る よ う に コ マ ン ド 2 つ
$ apt-get install git
$ git clone https://github.com/higanworks/chef-with-ruby_`lsb_release -cs-uname -i`.git /opt/ruby-chef
</code></pre>
以降はとりあえずUbuntuで上記を使った場合のchef-solo発動までを紹介。
Cheffile作業ディレクトリへ
リポジトリをクローンしたら /opt/ruby-chef で作業する。
cd /opt/ruby-chef
サンプルではcookbooksもこの下に置かれるようにしている。
librarian-chefは必要なCookbookの名前と所在、依存をCheffileに書き、installサブコマンドでCookbooksディレクトリを形成する。
集めた結果をCheffile.lockに書く、lockを元に作るdeploymentモードこそ無さそうだがとてもbundlerのようだ。
Cheffile.sample をそのまま使う場合はCheffileとしてコピー。
cp Cheffile.sample Cheffile
空のCheffileを作る場合は
./bin/librarian-chef init
Cheffileからcookbooksの準備
chefファイルにcookbookの名前と所在を書く、とりあえずsoloなのでこのサーバに必要なものだけ記述。
nginxとredisとmonitを導入したい、ついでにruby(rvm)。
Cheffile(sample)
!/usr/bin/env ruby
^syntax detection
site 'http://community.opscode.com/api/v1'
cookbook 'apt'
external
cookbook 'rvm',
:git => 'https://github.com/fnichol/chef-rvm'
my cookbooks
cookbook 'nginxppa',
:git => 'https://github.com/higanworks-cookbooks/nginxppa.git'
cookbook 'monitbinaries',
:git => 'https://github.com/higanworks-cookbooks/monitbinaries.git'
cookbook 'redissrc',
:git => 'https://github.com/higanworks-cookbooks/redissrc.git'
</code></pre>
Cookbookインストール
./bin/librarian-chef install と叩き、./cookbooksの下にCookbookを集めてくる。
./bin/librarian-chef install
./bin/librarian-chef show
apt (1.4.8)
monitbinaries (0.0.3)
nginxppa (0.0.1)
redis_src (0.0.1)
rvm (0.9.1)
</code></pre>
もちろんこれをknife cookbook uploadするような運用もあり。
レシピの適用
単一のレシピ適用
solo用のサンプルコンフィグがついているので叩く。
適用したいレシピは-oで指定できる。
./bin/chef-solo -c solo.rb -o nginx_ppa::default
-- snip --
[2012-09-19T20:29:28-07:00] INFO: Processing package[nginx] action install (nginx_ppa::default line 34)
-- snip --
nginx -v
nginx version: nginx/1.2.3
</code></pre>
Jsonの構成ファイルを用いた複数のレシピ適用
-oの直接指定ではなく、chef-soloに-jでjsonによる構成ファイルを渡す。
色々入れて、rvmでruby1.9.3を使えるようにしておいてねというコース。
sample.json
{
"rvm" : {
"defaultruby" : "system",
"rubies" : [
"ruby-1.9.3-p194"
]
},
"runlist" : [
"recipe[apt]",
"recipe[nginxppa]",
"recipe[monitbinaries]",
"recipe[redis_src]",
"recipe[rvm::system]"
]
}
</code></pre>
Roleも書ける。
./bin/chef-solo -c solo.rb -j ./sample.json
[2012-09-19T20:28:35-07:00] INFO: *** Chef 10.14.2 ***
[2012-09-19T20:28:35-07:00] INFO: Setting the runlist to ["recipe[apt]", "recipe[nginxppa]", "recipe[monitbinaries]", "recipe[redissrc]", "recipe[rvm::system]"] from JSON
[2012-09-19T20:28:35-07:00] INFO: Run List is [recipe[apt], recipe[nginxppa], recipe[monitbinaries], recipe[redis_src], recipe[rvm::system]]
-- snip --
redis-server -v
Redis server version 2.4.16 (04a08723:1)
monit -V
This is Monit version 5.5
Copyright (C) 2001-2012 Tildeslash Ltd. All Rights Reserved.
nginx -v
nginx version: nginx/1.2.3
</code></pre>
あとは設定ファイルをテンプレートにレシピを書いて、構成をバージョン管理していく。