Chef と戯れ始めてはや 1 週間。
先輩方の手厚いサポートもあり、少しずつ敵の姿をとらえつつあります m0t0k1ch1 です。
ちなみに、この記事は 第 1 回戦 の続編的なノリでお届けさせていただいております。
今回の課題
- perl-build で任意のバージョンの Perl をインストールしてくれる cookbook をつくってみよう
下準備
- いつも通り repository の中に入って cookbook の雛形をつくる、ただそれだけ
$ knife cookbook create perl -o site-cookbooks
完成した cookbook の内容
- recipe
- Perl のバージョンは指定できるように
- 同じバージョンの Perl はインストールしない
perl_user = node['perl']['user']
perl_group = node['perl']['group']
perl_version = node['perl']['version']
binary_dir = "/home/#{perl_user}/bin"
perl5_dir = "/home/#{perl_user}/perl5"
directory "#{binary_dir}" do
owner perl_user
group perl_group
mode 0755
action :create
end
remote_file "#{binary_dir}/perl-build" do
source node['perl']['perl-build']['binary-url']
owner perl_user
group perl_group
mode 0755
action :create_if_missing
end
bash 'install perl' do
user perl_user
group perl_group
not_if { File.exists?("#{perl5_dir}/perl-#{perl_version}") }
code <<-"..."
#{binary_dir}/perl-build #{perl_version} #{perl5_dir}/perl-#{perl_version}
...
end
- attribute
default['perl']['user'] = 'user-name'
default['perl']['group'] = 'user-group'
default['perl']['version'] = '5.16.3'
default['perl']['perl-build']['binary-url'] = 'https://raw.github.com/tokuhirom/Perl-Build/master/perl-build'
- JSON
run_list
の中に Perl を含める
まとめ
- Chef の雰囲気、なんとなくつかめてきた
owner
やuser
は、無指定だと極論なんでもいいってことなので、ちゃんと指定するremote_file
とかbash
使いだすとなんでもできてしまう感があって乱用してしまいがちだが、なるべく「これでしかムリだわ!」ってときしか使わないように心がけた方が良い(今回は使っちゃいましたが…)remote_file
するときに:create_if_missing
は便利- 先輩に教えていただくまで気づかなかった…
- ドキュメント読む癖をつけれ俺