入門 ChefSolo 自分メモ (1)

リポジトリ (キッチン)、クックブック、レシピ

レシピについて以下な記述あり。

  • 「コード化された手順書」あるいは「サーバーの状態」をレシピと呼ぶ (入門 ChefSolo より引用)

あるいは特定のレシピに必要なデータやファイルをクックブックと呼ばれる入れ物でまとめ、それらのクックブック群を含め Chef の実行に必要な一連のファイルをレポジトリ、あるいはキッチンと呼ばれる入れ物でまとめるとのこと。
以下な階層でレシピ群を管理。

レポジトリの作成

opscode な Github から clone して作れる。

$ git clone git://github.com/opscode/chef-repo.git

knife-solo を使ってレポジトリを作ることもできる。

クックブックの作成

knife はレポジトリを操作するためのツール。Chef 導入するとインストールされるとのこと。クックブックは knife コマンドで作成。
Chef Solo 環境では knife cookbook と knife solo 程度しか使わない模様。
作成の例。

$ cd chef-repo
$ knife cookbook create hello -o cookbooks

これで出力されるレシピは cookbooks/hello/recipes/default.rb な模様。ハロワな例が以下。

log "Hello, Chef!"

実行

例えば以下な形で実行。

$ sudo chef-solo -c solo.rb -j ./localhost.json

solo.rb が例えば以下な形。

# solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/home/ec2-user/chef-repo/cookbooks"]

あるいは localhost.json が以下。

// localhost.json
{
    "run_list" : [
        "recipe[hello]"
    ]
}

Chef Solo の流れ

  • レシピ作成
  • JSON ファイルで実行するレシピ指定
  • chef-solo コマンドで実行

Resource について

レシピ記述に log とか package という命令を使ったがこれらは Chef が提供する DSL であり、Chef では Resource と呼んでいる。Resource は自作もできる。Resource の一覧は以下から確認できるとのこと。

Service、Template という Resource について

Service はサービスの状態を Chef のレシピで記述する時に使う。また、Template は設定ファイルなどを Chef 上で操作する時に使う。erb テンプレートで云々するなど。
erb な変数展開のタグと JSON なハッシュを使って値の設定と紐付けをしている模様。

Node Object について

Chef では管理対象のサーバを node と呼ぶ。JSON に記述されるのはある特定の node の状態。また、JSON ファイルに記述されているデータは Node Object と呼ばれる。
Node Object の属性として

  • その Node に適用するべきレシピを列挙
  • 変数 (Attribute) の値を列挙

するとのこと。成程。
Node Object は基本的に Chef で操作する対象 Node 毎に作成。