入門ChefSoloをさらにめちゃめちゃわかりやすく解説してみた

入門Chef Solo - Infrastructure as Code はとても丁寧に書かれているのですが、私のようなヘボプログラマにはまだ難易度が高く感じられました。

そこで、もっと噛み砕いた入門記事を書いてみます。
目標はChefSoloで"hello world"してzshをインストールするとこまでです。

以下、素のCentOS6にrootでログインして作業してください。
(rootで作業は普通ありえないですが、練習ということで)

準備

まずviが使えない(ヘタレ)なのでnanoを入れます。
viが使える人は以下のnanoをviと読み替えてください。
sudo yum install -y nano

Chefをインストール

早速Chefをインストールします。
curl -L http://www.opscode.com/chef/install.sh | sudo bash
1行でできるので楽ちんですね。
これだけで、knife,chef-soloコマンドなどが使えるようになります。

どこにインストールされたのかというと、/opt/chef/ の中にあります。
Rubyインタープリタもそこに同梱されています。(/opt/chef/embedded/bin/ruby)

初期設定

knife configure
質問聞かれたら無言でエンターを叩いてください。
solo.rbを作る
さきにsolo.rbを作っておきます。
mkdir /etc/chef

nano /etc/chef/solo.rb
下記のように記述します。
file_cache_path "/tmp/chef-solo"
cookbook_path ["/root/chef-repo/cookbooks"]
ここまではおまじないだと思って大丈夫です。

キッチンを作る

キッチンというのは一番大きい入れ物です。別名"chef-repo"ともいいます。
といっても単にディレクトリのことなので、mkdirするだけです。
mkdir chef-repo
cd chef-repo

クックブックを作る

knife cookbook create hello -o cookbooks
クックブックというのも本質的にはレシピが入ってるディレクトリのことなので、knife cookbookとかせずに手動でmkdirしてもかまいません。

レシピを書く

nano cookbooks/hello/recipes/default.rb
hello worldを書きましょう
log "hello world"

jsonファイルを作る

nano ~/localhost.json
以下のように書きます。
{
  "run_list" : ["recipe[hello]"]
}
jsonファイルのファイル名と置き場所はどこでもよいのですが、覚えやすいように ~/localhost.jsonとしました。

chef soloを実行する

sudo chef-solo -j ~/localhost.json
"hello world"が表示されたら成功です!

chef soloでzshをインストール

再びレシピを編集して、
nano cookbooks/hello/recipes/default.rb
このように追記ます。
package "zsh" do
  action :install
end
そして実行します。
sudo chef-solo -j ~/localhost.json
zshがインストールされたら成功です!
うまく動きましたか?

解説

opscodeのchef-repoは不要
「入門ChefSolo」では
git clone git://github.com/opscode/chef-repo.git
していますが、これはやらなくても問題ありません。
自分でmkdir chef-repoすればおkです。
solo.rbの置き場所について
「入門ChefSolo」では、solo.rbを chef-repoの下に置いて
sudo chef-solo -c solo.rb
のように指定していますが、実はsolo.rbを /etc/chef/solo.rb に置けば引数を省略できます。

一方、-j localhost.json のようにjsonファイルを引数指定するのがもどかしいのですが、これは省略できないようです。

Vagrant連携やらknife soloやら
Vagrant連携とかknife soloに頼ってしまうとChefSoloの動作原理が見えにくくなってしまうので、最初のうちはそれらを使わずに素のchef-soloだけで何回か練習してみるのがよいと思います。
chef-soloの動作原理がわかったら、Vagrant連携とかknife soloとかを使って省力化するとよいでしょう。

以上、不明点とかここがおかしいよとかあったら教えてください。



カテゴリ: