オススメのchef
どうも五条です。chefを使いたいという人がいたらknife-soloはいかがでしょうか?私はいろいろ調べた結果chefはknife-soloで運用しています。インストールはこれを見れば迷わないと予想される。
- chefの大雑把な説明
chefとは①ローカルでサーバの設定ファイルを作成して、②リモートのサーバに変更を行い、③それら設定ファイルや変更事項がリポジトリ管理されていて、④誰が何回行っても同様の設定結果が行われ、⑤事前に変更内容を上司や同僚などに確認させて判子を押させてから実行することができ、⑥複数台に同様の変更・設定を加えるときに、手間が減るようにするためのアプリ。種類が沢山あるが、vagrantを使うまでも無いと私は考えているので、chefの一種であるknife-soloにする。
- 使用上の注意
実行ユーザが鍵認証でリモートのホストへパスワード無しでログインでき、リモートでsudo -sでパスワード無しでrootになれることが必要。
- knife-soloのインストール
# rubyのインストール。ruby-develはchefのコンパイルに必要。
yum install ruby ruby-deve
# gemでknife-soloをインストール(gemはruby専用のyumみたなもの)
gem install knife-solo
- chefホームの設定
# chef用ディレクトリを作成し、chefホームにする。ここでは~/chefをchefのホームに設定する。(どこでもいいがユーザのホームディレクトリ内が正しい気がする)
mkdir ~/chef && cd ~/chef
# knife-soloに使用するファイルの展開。カレントに展開。
knife solo init .
# 初期設定。全部ディフォルトで良い。
knife configure
# 必要なら変更する。おそらく鍵の部分は変更になるかもしれない。
vim ~/.chef/knife.rb
# cookbookの作成
cookbook=test
#testというクックブックを作成。これで~/chef/bookcooks/testが作成される。
knife cookbook create $cookbook -o cookbooks
# $hostにchef-solo(knife-soloを動作させるファイル郡の配置)
host=centlocal
knife solo prepare $host
- rubyをインストール場合
vim cookbooks/$test/recipes/default.rb
# run_list設定。recipeの中のtestはdefaultの場合はtestだけで良い。それ以外の場合は、「test::ファイル名」と書く。
vim nodes/$host.json # 先頭の方のみ追記
"run_list":[
"recipe[test]"
],
# 実際にレシピを実行
knife solo cook $host
- ファイルコピーの場合の例
#ファイルコピーという名前でクックブックを作成
cookbook=filecopy
knife cookbook create $cookbook -o cookbooks
# レシピ作成
vim cookbooks/$test/recipes/default.rb
cookbook_file '/etc/hosts' do
source "etc.hosts"
owner "root"
group "root"
mode "0644"
end
vim nodes/$host.json # 先頭の方のみ追記
"run_list":[
"recipe[filecopy]"
],
# knife-solo実行
knife solo cook $host
# 結果確認
ssh $host "cat /etc/hosts"
- bash実行
cookbook=bash
knife cookbook create $cookbook -o cookbooks
vim cookbooks/$cookbook/recipes/default.rb
script "copy file" do
interpreter "bash"
code <<-EOH
cp /etc/hosts /etc/hosts.`date +%Y%m%d_%H%M%S`
sleep 1
cp /etc/hosts /etc/hosts.`date +%Y%m%d_%H%M%S`
sleep 1
cp /etc/hosts /etc/hosts.`date +%Y%m%d_%H%M%S`
sleep 1
cp /etc/hosts /etc/hosts.`date +%Y%m%d_%H%M%S`
sleep 1
cp /etc/hosts /etc/hosts.`date +%Y%m%d_%H%M%S`
EOH
end
# 先頭の方のみ追記
vim nodes/$host.json
"run_list":[
"recipe[bash]"
],
# knife-solo実行
knife solo cook $host
# 結果確認
ssh $host "ls -l /etc/hosts*"
-rw-r--r-- 1 root root 183 7月 22 19:52 2016 /etc/hosts
-rw-r--r-- 1 root root 183 7月 22 20:12 2016 /etc/hosts.20160722_201205
-rw-r--r-- 1 root root 183 7月 22 20:12 2016 /etc/hosts.20160722_201206
-rw-r--r-- 1 root root 183 7月 22 20:12 2016 /etc/hosts.20160722_201207
-rw-r--r-- 1 root root 183 7月 22 20:12 2016 /etc/hosts.20160722_201208
-rw-r--r-- 1 root root 183 7月 22 20:12 2016 /etc/hosts.20160722_201209
-rw-r--r--. 1 root root 378 4月 19 22:10 2015 /etc/hosts.allow
-rw-r--r--. 1 root root 460 1月 12 22:28 2010 /etc/hosts.deny
- 小技というか実際の使い方。
私に言わせれば使い方は二種類ある。①対象のホスト毎にクックブックを 作成する方法と、②サーバプログラム毎にクックブックを作成する方法。