ChefはOPSCODEが公開しているサーバの構成管理ツール。構成のrecipeをRubyベースのDSLで記述できるのが特徴。
基本的には、構成情報の管理サーバChef-Serverに対して、各クライントからリクエストを送り、必要なミドルウェアのインストールや設定を行うみたいだけど、どうもChef-Serverセットアップがちょっと面倒みたいなので、今回はスタンドアロンで動作可能なchef-soloを利用して環境構築してみる。
ちなみに、Chef-Serverは独自に立てなくてもOPSCODEがHosted Chef | OpscodeってサービスをSaaSで提供してるので、それを利用するという手もある。(5ノードまでは無料で使える)
インストール
インストールや使い方については、Installing Chef Client and Chef Solo - Chef - Opscode Open Source Wikiを参考にして進める。インストールする環境毎にそれぞれマニュアルが用意されてる。今回はローカル環境がUbuntuなのでInstalling Chef Client on Ubuntu or Debian - Chef - Opscode Open Source Wikiに従ってセットアップ。
# APTのソースリストにOPSCODEのリポジトリを追加する。 $ echo "deb http://apt.opscode.com/ `lsb_release -cs`-0.10 main" | sudo tee /etc/apt/sources.list.d/opscode.list # 続いて鍵の登録 $ sudo mkdir -p /etc/apt/trusted.qpg.d $ gpg --keyserver keys.gnupg.net --recv-keys 83EF826A $ gpg --export packages@opscode.com | sudo tee /etc/apt/trusted.gpg.d/opscode-keyring.gpg > /dev/null # パッケージをアップデート $ sudo apt-get update $ sudo apt-get install opscode-keyring # chefのインストール(aptでインストールする場合) $ sudo apt-get install chef インストール中に使用するChef ServerのURLの入力を求められるけど、今回はchef-solo使うので「none」と入力。
chefのインストールが終わるとchef-clientの起動スクリプトが/etc/init.d/chef-clientに、chef-clientの設定ファイルが/etc/chef/client.rbに作成されてる。
※chef自体はaptで入れなくてもrubyのgemでインストールするのも可能。(Rubyのバージョン変わったりした際に毎回gemインストールするのも面倒なので今回はaptで入れた)
chef リポジトリ
続いて、chef リポジトリの雛形を用意する。
$ git clone git://github.com/opscode/chef-repo.git
雛形の各ディレクトリの役割は↓
chef-soloの設定
chef-soloコマンドでは↓のオプションが用意されてる。
- -c,--config
chef-soloの設定ファイルのパスを指定(solo.rb) - -j,--json-attributes
nodeの属性を定義するjson attributeのファイルパスを指定 - -r,--recipe-url
chefのrecipeのURLを指定
まずchef-soloで使用する設定ファイルであるsolo.rbを作成する。
$ mkdir chef-repo.git/.chef $ touch chef-repo.git/.chef/solo.rb
solo.rbの中身は↓な感じ。
file_cache_path "/var/chef-solo" # キャッシュファイルのパスを指定 cookbook_path "/var/chef-solo/cookbooks" # cookbookのパスを指定
パスはどこでも良いけど、絶対パスで定義する必要があるのと、cookbook_pathはfile_cache_pathのサブディレクトリにしとく必要があるみたい。cookbook_pathについては、↓みたく複数のパスを指定することも可能。
cookbook_path ["/var/chef-solo/cookbooks", "/var/chef-solo/site-cookbooks"]
また、-jと-rのオプションで指定するjson attributeのパスとrecipeのURLは↓みたくsolo.rb内に定義することも可能。
json_attribs "http://www.example.com/node.json" recipe_url "http://www.example.com/chef-solo.tar.gz"
以上で基本的なセットアップはDone。