chef を使ってみました。openldap をインストールする機会があったので、試しに openldap のインストールレシピを書いてみます。
はじめてのレシピ
レシピ雛形作成
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 # 鍵を持ってくる 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 を実行。