はじめてのchefレシピ

chef http://wiki.opscode.com/display/chef/Home を使ってみました。試しに openldap のインストールレシピを書いてみます。

[:contents]

はじめてのChefレシピ

はじめてのレシピ

レシピ雛形作成
 cd /opt/chef-repo
 knife cookbook create -o cookbooks myopenldap
 cd cookbooks/myopenldap
ファイル作成

metadata.rb

 recipe "myopenldap::client", "installs and configures openldap-clients"
 recipe "myopenldap::server", "installs and configures openldap-servers"

recipe/client.rb

 package "openldap-clients" do
   action :install
 end

recipe/server.rb

 package "openldap-servers" do
   action :install
 end
 
 template "/etc/openldap/slapd.conf" do
   source "slapd.conf.erb"
   action :create
 end
 
 service "slapd" do
   service_name "ldap"
   action [:enable, :start]
 end

template/default/slapd.conf.erb

 /etc/openldap/slapd.conf のコピー。

テンプレート補足

変数展開したい場合は、attributes/default.rb に

 default["first_name"] = "Mickey"

のように書いておき、template erb ファイルで

 <%= node["first_name"] %>

のように利用する。

レシピの登録
 knife cookbook upload -o .. myopenldap

knife cookbook

 knife cookbook delete tomcat
 knife cookbook upload -o path/to/cookbooks tomcat

どうやら一度消さないと更新にならないらしい。

 knife cookbook delete -a
 knife cookbook upload -o path/to/cookbooks -a

Chef

Chef-Serverのインストール

これで一発。むしろこれ以外の方法は、何をどうしても上手くいかなかった。

http://blog.frameos.org/2011/04/29/installing-chef-server-0-10-in-centos-5-rhel-5/

Chef-Clientのインストール

http://wiki.opscode.com/display/chef/Installation+with+RubyGems

rvmを使うように修正した。

 # NOTE: EXECUTE AS A ROOT USER
 #wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
 #rpm -Uvh epel-release-5-4.noarch.rpm
 wget -O /etc/yum.repos.d/aegis.repo http://rpm.aegisco.com/aegisco/el5/aegisco.repo
 yum -y install git gcc gcc-c++ automake autoconf make
 yum -y install zlib zlib-devel readline readline-devel openssl openssl-devel
 # Install rvm
 wget https://rvm.beginrescueend.com/install/rvm -O /tmp/rvm-install.sh
 bash /tmp/rvm-install.sh
 echo 'export PATH=/usr/local/rvm/bin:$PATH' >> /etc/bashrc
 source ~/.bash_profile
 # Install ruby1.8.7 using rvm
 rvm install 1.8.7
 rvm use 1.8.7
 rvm use 1.8.7 --default
 # Install gem
 cd /tmp
 wget http://production.cf.rubygems.org/rubygems/rubygems-1.7.2.tgz
 tar zxf rubygems-1.7.2.tgz
 cd rubygems-1.7.2
 ruby setup.rb --no-format-executable
 cd -
 # Install Chef gem and Ohai
 gem install chef
 gem install ohai

Chef-Serverの設定(初回)

サンプルレシピを登録(初回)

http://higelog.brassworks.jp/?p=643

knifeを使って、クライアントとして自分自身(サーバ)に接続して、レシピを登録する。

 knife configure -i
 cd /opt
 git clone git://github.com/opscode/chef-repo.git
 cd /opt/chef-repo
 rm -rf cookbooks
 git clone git://github.com/opscode/cookbooks

cookbook登録

 knife cookbook upload -a -o /opt/chef-repo/cookbooks
Example Role を登録(お試し)

/opt/chef-repo/roles/examples.rbの内容を以下のように編集。

 name "example"
 description "Example role for the chef repository"
 run_list("recipe[zsh]", "recipe[screen]", "recipe[git]")

RoleをChef-Serverに登録

 cd /opt/chef-repo
 rake roles

ユースケース1~ノード登録

Chef-Server

ノード作って、そのノードに Role を追加。

 CHEF_NODE=ノード名 # 普通は、ホスト名。repo など。
 CHEF_ROLE=ロール名 # "role[example]" など
 knife client create ${CHEF_NODE} -n -a -f ~/.chef/${CHEF_NODE}.pem
 knife node create ${CHEF_NODE} -n
 knife node run_list add ${CHEF_NODE} "${CHEF_ROLE}"
Chef-Client
 CHEF_NODE=`hostname -s` # 普通は、ホスト名。repo など。
 mkdir -p ~/.chef
 mkdir -p /etc/chef
 rm -f ~/.chef/knife.rb
 echo "~/.chef/knife.rb
 http://10.60.107.187:4000
 ${CHEF_NODE}
 chef-validator
 /etc/chef/validation.pem " | knife configure
 # プロキシ設定を追加
 echo 'http_proxy "http://proxy.ricoh.co.jp:8080"
 https_proxy "http://proxy.ricoh.co.jp:8080"
 http_proxy_user "p0xx000308"
 http_proxy_pass "v8h8ry29"
 no_proxy ".ricoh.co.jp, .ricoh.com, .rintra.net, localhost, 133.139.*, 165.96.*, 151.114.*, 210.173.218.*, 10.*, 172.16.*, 192.168.*, 127.0.0.1, 10.60.107.*"' >> ~/.chef/knife.rb
 # 鍵を持ってくる
 scp 10.60.107.187:/root/.chef/${CHEF_NODE}.pem ~/.chef/${CHEF_NODE}.pem
 scp 10.60.107.187:/etc/chef/validation.pem /etc/chef/validation.pem

お試し実行

 chef-client -c ~/.chef/knife.rb

ユースケース2~ロールファイルの変更(追加)

Chef-Server

ロールファイルを修正

 vi /opt/chef-repo/roles/ロール名.rb 

ロールファイルを上書き登録

 cd /opt/chef-repo
 rake roles

ノードのRoleを追加or変更

 knife node run_list add ノード名 ロール名
Chef-Client

実行

 chef-client -c ~/.chef/knife.rb

トラブルシュート

chef-clientデバグモード

chef-client -c ~/.chef/knife.rb -l debug

[BUG] Segmentation fault

たまに出るので、もう一度 chef-client を実行。