fbpx

[和訳] 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の力を利用しています。次のような多くのシナリオを扱えるように設計されています。

  1. 初心者向け: ローカルモードによって、初心者は最初のRecipeを可能な限り早く実行できます。Chefをインストールし、Recipeを書き、chef-client -z -o cookbooknameを実行するだけです!
  2. 高速なRecipe開発: ローカルモードを使うと、chef-clientの実行、Recipe、Data Bag、Roleなどの変更、chef-clientの再実行を、合間に別の手順なしで行えます。
  3. 単独利用: ローカルのWorkstationをサーバとしてChefで設定しやすくなり、複数のリモートサーバを取り扱う実際のChef Serverへの移行も容易です。

ローカルモードを始めよう

次はローカルモードを始めるための最も基本的なシナリオです。

  1. Chefをインストールします。
  2. cookbooks/helloworld/recipes/default.rbを作成します。

    file "#{ENV['HOME']}/x.txt" do
    content 'HELLO WORLD'
    end
  3. 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 WORLD

    Chef 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 -zknife -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にいただければ幸いです。

新規CTA