CentOS6.4 で Ruby1.9.3, RubyGems をインストールしてある環境で、chef-solo を使って ntpd をインストールしてみました。
ここでは、chef, knife-solo をインストールするところからスクリプトに含めています。
#! /bin/sh
ruby=ruby-1.9.3-p392
rubygems=rubygems-2.0.3
/usr/local/ruby/${ruby}/bin/gem install chef knife-solo
mkdir -p $HOME/chef-solo/cookbooks
cat > $HOME/chef-solo/solo.rb <<EOF
file_cache_path "/tmp/chef-solo"
cookbook_path "/root/chef-solo/cookbooks"
EOF
cat > $HOME/chef-solo/chef.json <<EOF
{
"run_list": [ "recipe[ntp]" ]
}
EOF
/usr/local/ruby/${ruby}/bin/knife cookbook create ntp -o $HOME/chef-solo/cookbooks
cat > $HOME/chef-solo/cookbooks/ntp/recipes/default.rb <<EOF
# Cookbook Name:: ntp
# Recipe:: default
package "ntp" do
action :install
end
service "ntpd" do
supports :status => true, :restart => true
action [ :enable, :start ]
end
template "/etc/ntp.conf" do
source "ntp.conf"
group "root"
owner "root"
mode "400"
notifies :restart, "service[ntpd]"
end
EOF
cat > $HOME/chef-solo/cookbooks/ntp/templates/default/ntp.conf <<EOF
driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
server -4 ntp.nict.jp iburst
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
EOF
/usr/local/ruby/${ruby}/bin/chef-solo -c $HOME/chef-solo/solo.rb -j $HOME/chef-solo/chef.json
最後の行で、chef-soloを実行してレシピを適用しています。
ちなみに、作成したディレクトリ構成は下記のようになります。
/root/chef-solo/ |-- chef.json |-- cookbooks | `-- ntp | |-- CHANGELOG.md | |-- README.md | |-- attributes | |-- definitions | |-- files | | `-- default | |-- libraries | |-- metadata.rb | |-- providers | |-- recipes | | `-- default.rb | |-- resources | `-- templates | `-- default | `-- ntp.conf `-- solo.rb
$HOME/chef-solo/cookbooks にレシピを追加していって、$HOME/chef-solo/chef.json に実行するレシピを記載して、「chef-solo -c ./solo.rb -j ./chef.json」を実行すると、同じ環境がどこでも用意できるということになります。