要件
- 最近、chef ネタばっかりですいません
- redis という Key Value Store タイプのデータベースをインストールしてみる
- サービスの起動も設定する
- execute に一切頼らない方法!
とは言え...
execute で書いてみる
remote_file "/usr/local/src/redis-2.6.9.tar.gz" do
source "http://redis.googlecode.com/files/redis-2.6.9.tar.gz"
end
execute "unpack_redis" do
command "cd /usr/local/src/ && tar zxvf redis-2.6.9.tar.gz"
end
execute "install_redis" do
command "cd /usr/local/src/redis-2.6.9 && make test && make && make install"
end
execute "running_redis" do
command "/usr/local/bin/redis-server"
end
ダメな点
- remote_file はまあイイ
- execute を使いすぎ
- 毎回 make install することになるんぢゃ...w
- 二回目以降の chef 実行時の判断が入ってない
今んとこマシと思われる書き方
ソースコードの取得からインストールまで
remote_file "/usr/local/src/redis-2.6.9.tar.gz" do
source "http://redis.googlecode.com/files/redis-2.6.9.tar.gz"
notifies :run, "bash[install_program]", :immediately
end
bash "install_program" do
not_if "ls /usr/local/bin/redis-server"
user "root"
cwd "/usr/local/src"
code <<-EOH
tar -zxf redis-2.6.9.tar.gz
(cd redis-2.6.9/ && make test && make && make install)
EOH
end
- remote_file でソースをゲット
- bash で redis がインストールされていない状態であればコンパイルしてインストールする
サービスの起動
bash "starting_redis" do
not_if "ps aux | grep redis-server |grep -v"
user "root"
code <<-EOH
/usr/local/bin/redis-server &
EOH
end
- redis-server が起動していなければ起動するという処理を強引に追加
まとめ
- 今回の決めては bash と not_if
- ただ、まだ工夫が必要!
- そもそもリソースタイプ(?) bash って何なん?
- 気になったけど execute で以下のような書き方が出来ない?
execute "install_redis" do
until File.exists?("/usr/local/bin/redis-server") do
command "cd /usr/local/src/redis-2.6.9 && make test && make && make install"
end
end