[Chef] Cookbook,Recipe,Roleの関係

Chef検証再開。

Chefを設計・運用するうえで、どうしても理解しなければいけないのが、CookbookRecipeとRole`の関係。

とりあえず、それを理解するためにこのスライドを見てみた。

Resouceは設定の最小単位

Resouceは各種設定の最小単位と解釈しました。
ファイルを配置する、ソフトウェアをインストールする、ユーザを作る、等など。

これらの設定はOSによってコマンドはまちまちですが、それぞれのコマンドの違いはPlatformやらProviderやらで吸収されて、ResouceではそれらのOSの違いを意識せずに設定を指定できるところが良いところです。

RecipeはResourceのリスト

スライドに

Recipes are lists of Resources

と書いてありました。

僕は、「Recipeは一つの操作をするために必要なこと(Resource)がまとまったもの」と解釈しました。
例えば、apacheをインストールする場合、以下のような設定をする必要があります。

  • apacheのインストール
  • httpd.confの設定
  • 必要に応じて各種設定

それらを一つのRecipeの中に書くことで、apacheのインストールという一つの操作を完了することができます。

[ Cookbook -ne Role ]

分からなかったのが、CookbookとRoleの区別でした。
Roleは単語の意味からWebServerなどの役割を指定して、そのRoleをNodeに適用するとWebServerの機能が構築されてWebServerとして利用できるものと理解しています。

では、Cookbookは?

Cookbookの役割がよくわからなかったので、試しに[Opscode Public Cookbooks](Opscode Public Cookbooks)からApacheのCookbookをダウンロードして中を見てみました。
Cookbook[“apache”]のRecipeのdefaults.rbはapache本体のインストールでした。
そして、defaultではないその他のRecipeはapache modulesのインストールでした。

これで何となくCookbookが分かって来た気がしますが、さらに理解を深めるためcookbook[MySQL]を見てみました。

cookbook[“MySQL”]のRecipesの中にはdefault.rb,client.rb,server.rbがありました。
Recipeのdefault.rbには一行。

include_recipe "mysql::client"

CookbookはRecipeのグループ

これらの調査から、Cookbookはソフトウェアや設定のグルーピングとして使うという理解に至りました。
特定のソフトウェアとそれに付属するソフトウェアや設定などを一つのCookbookにまとめることができそうです。

Roleを書く

ということでまとめという意味でWebServerというRoleがあったと仮定して、そのRoleのファイルを書いてみます。


name "webserver"
run_list "recipe[common]","recipe[apache2]", "recipe[apache2::mod_proxy]","role[product]", "role[datacenter01]"

まだまだ続く

とりあえずここまでなーんとなく分かった気がします。

でも、まだまだ分からないことばかり。
例えば、attributeとか。
さらに調査を続けます。

もし、この記事の内容に理解に誤りがあれば、是非ご指摘ください。お待ちしています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です