[和訳] chef-client -z: 8.5秒でZeroからChefへ #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は chef-client -z: From Zero To Chef In 8.5 Seconds (2013/10/31) の和訳です。
Chef 11.8にて「chef-client -z」によるローカルモードを導入することに興奮しています。Chefを可能な限り早く実行できるようにするため、ローカルモードは、サーバを設定したり、鍵を登録して取得したり、クライアントを設定したり、root権限を得たりすることなしに、ローカルでRecipeを実行しChefのすべての能力を使えるように、chef-zeroの力を利用しています。次のような多くのシナリオを扱えるように設計されています。
- 初心者向け: ローカルモードによって、初心者は最初のRecipeを可能な限り早く実行できます。Chefをインストールし、Recipeを書き、chef-client -z -o cookbooknameを実行するだけです!
- 高速なRecipe開発: ローカルモードを使うと、chef-clientの実行、Recipe、Data Bag、Roleなどの変更、chef-clientの再実行を、合間に別の手順なしで行えます。
- 単独利用: ローカルのWorkstationをサーバとしてChefで設定しやすくなり、複数のリモートサーバを取り扱う実際のChef Serverへの移行も容易です。
ローカルモードを始めよう
次はローカルモードを始めるための最も基本的なシナリオです。
- Chefをインストールします。
-
cookbooks/helloworld/recipes/default.rbを作成します。
file "#{ENV['HOME']}/x.txt" do
content 'HELLO WORLD'
end
-
chef-clientを実行します。
$ chef-client -z -o helloworld
[2013-10-30T16:39:59-07:00] WARN: No config file found or specified on command line, using command line options.
Starting Chef Client, version 11.8.0.rc.1
[2013-10-30T16:40:01-07:00] WARN: Run List override has been provided.
[2013-10-30T16:40:01-07:00] WARN: Original Run List: [recipe[helloworld]]
[2013-10-30T16:40:01-07:00] WARN: Overridden Run List: [recipe[helloworld]]
resolving cookbooks for run list: ["helloworld"]
Synchronizing Cookbooks:
- helloworld
Compiling Cookbooks...
Converging 1 resources
Recipe: helloworld::default
* file[/Users/jkeiser/x.txt] action create
- update content in file /Users/jkeiser/x.txt from 9b96a1 to 787ec7
--- /Users/jkeiser/x.txt 2013-10-15 10:52:19.000000000 -0700
+++ /var/folders/87/lgq7l8yj6yg5j6323hc0jn7h0000gn/T/.x.txt20131030-5422-6h1dud 2013-10-30 16:40:01.000000000 -0700
@@ -1,2 +1,2 @@
-hi there
+HELLO WORLDChef Client finished, 1 resources updated
ややこしくもなく遅くもなく、最初のRecipeを実行できました!
なんと、Data Bag、Role、Searchも!
chef-client -zは、Data Bag、Role、Environment、さらにSearchまでも含んだChefの概念のすべてをサポートしています。これらを追加するには、ファイルを作ってやるだけです。
clients/NAME.json
cookbooks/NAME/...
data_bags/BAG_NAME/NAME.json
environments/NAME.json
nodes/NAME.json
roles/NAME.json
users/NAME.json
本番環境へのゆるやかな移行
しばらくの間Recipeを開発していってローカルモードの手に余るようになってきたら、ホステッドChef ServerやプライベートChef Serverに移行したくなるでしょう。chef-client -zには明確な移行パスがあります。移行のときがきたら、カレントディレクトリに.chef/knife.rbを作成し、knife uploadを実行するだけです。
knife upload /
全Cookbook、Data Bag、Role、Node、その他すべてがサーバにアップロードされました。いざクラウドへ!
Knifeローカルモード
Knifeもローカルモードで動作します! 例えば、Nodeのrun_listを設定したいなら、knife node list -zでNode名を見つけて次を実行します。
knife node run_list add -z Node名 recipe[helloworld]
そして次を実行すると、
chef-client -z
何も引数をつけなければ常に「helloworld」を実行します。
書き戻し
ローカルモードには特別な組み込み機能があります。RecipeがデータをChef Serverに保存したら、そのデータはレポジトリに入ります! もしRecipeがData Bagを作成したり更新したり、Node Attributeを更新したり、Nodeをタグづけしたりすると、データは直接ローカルのファイルシステムに書き戻され、次回のchef-client -zやknife -zの実行で、それらを気にするようになります。
試してみてください! これの意味するところの1つとして、最初のchef-client実行の後、nodes/MYHOST.jsonファイルがNodeのデータを含んでいることがわかるでしょう。
chef-soloについて注意
chef-soloはまだ存在していますし、明らかに重複する部分があります。chef-soloを使っているほとんどの場合、chef-clientはchef-soloの全機能とそれ以上を供えているので、そのままchef-client -zを使えます。Recipeが:soloモードに特化したテストをしている場合のみ少し状況が異なります。chef-clientはその変数を設定しないからです。
いつも通り、問題や機能の要望があれば、http://tickets.opscode.com/にお知らせください。議論や寄稿があれば、メーリングリストやIRCにお願いします。お叱りは直接@jkeiser2にいただければ幸いです。