Anatomy of a Chef Runの訳
Anatomy of a Chef Runを訳しています。
Anatomy of a Chef Run
Chefを動かすならChef-clientの実行の仕組みは覚えておいた方がいいですよ。
Convergence
Chef-clientやChef-soloでプロセスを呼んだときは"Convergence"リソースを呼ぶ必要があります。
Convergenceはシステム内で自動的に"各動作を実行するときはシステムを正しい形でくださいね"ということを意味します。理想としてはChef-clientを一つのサーバで走らせるとき中途半端な状態ではなく完全な状態のシステムを利用できる事です。
うまく完了しなかった場合は続けてシステムに要求を送り続けます。
Chef-clientの実行
- Chef-Clientを実行
- Node作業
- 構築
- 登録
- 認証
- Cookbookの同期
- ライブラリを同期
- 変数を同期
- 定義を同期
- レシピを同期
- リソースをコンパイル
- ライブラリ読み込み
- 変数読み込み
- 定義読み込み
- レシピ読み込み
- Nodeを設定
- 保存
- Chef-client終了
Build, Register, and Authenticate the Node
Chef-clientもしくはChef-soloを実行する際、最初にNodeをたてます。Nodeは以下で構成されています。
- Ohai:OSから情報を持ってきます
- Chef-serverから前回のNode情報を持ってきます(Chef-solo使わないときのみ)
- JSONの変数とレシピを追加します
- Ohaiで取得してきた情報を追加します
一度Nodeが構築されるとChef-Clientは毎回/etc/chef/client.pemという非公開キーを参照するようになります。
それがない場合自身でそれを作ろうとします。それ自身を登録するときはChef-validaterを一意のものだと仮定します。Chef-validatorは特殊なクライアントでそれを利用する事で新しいユーザを作成することができます。Chef-validatorはデフォルトで/etc/chef/validation.pemに非公開キーを持ちます。一回作ってしまえば次回からは/etc/chef/client.pemを参照するようになります。
Synchronize Cookbooks
Chef-ClientはChef-Serverにライブラリ、変数、定義、レシピの一覧を取得しローカルのファイルキャッシュに溜め込みます。
Compile Resource Collection
COOKBOOKから情報を得た後、nodeに必要なリソースを収集します。
- ライブラリをロードする
- 言語拡張はRubyのクラスを使用可能にします
- 変数をロードする
- レシピやNodeの変数から変数をロードします
- 定義をロードする
- 定義はレシピの前に読み込まれている必要があり、それからリソースが生成されます
- レシピをロードする
Configure Node
Chefはこの時点でシステムとして設定できる準備ができています。
- Converge
- 各リソースはProviderにマッピングされます。ProviderとはChef上で動作可能なオブジェクトです。
- Save node
- Convergeした後Nodeを保存し、検索対象内にセットします。
- Run Notifications
- 最後には、設定した通知が動きます
Chef-Clientが失敗した場合exception handlerに登録した動作が実行されます。