Chef Solo ではなく Chef Client Local Mode を使おう

2014/06/24 に Opscode 公式ブログで From Solo to Zero: Migrating to Chef Client Local Mode という記事が公開されました。記事を要約すると「Chef Solo はオワコンだから Chef Client Local Mode を使え」ということのようです。

Chef Client Local Mode (旧 Chef Zero) って?

Chef Client Local Mode (旧 Chef Zero) は Chef Solo の全ての機能を備えており、Chef Server に移行する際にも楽です。Chef Client 11.8.0 から採用されました。実行するには chef-client--local-mode または -z オプションを付けます。

Local Mode ではローカルのファイルシステムから揮発性の Chef Server を作り、

Server-Client 構成と同じオペレーションが行われます。つまり Chef Server が無ければできなかった高度な機能を、サーバーレスで気軽に行うことができます。

Chef Server のフル機能を、Chef Solo 同様の気軽さで使えるのが、Chef Client Local Mode と言っていいでしょう。

Chef Solo から Chef Client Local mode に移行するべき理由

  1. Local Mode なら Server-Client で使える全ての機能 — environments, roles, (encrypted) data bags — が使える。ノードやレシピの検索機能も使える。

  2. 特別なツールや knife プラグインは必要無い。

  3. レシピ実行環境が Solo か Server かの分岐を書く必要が無くなる。例えば以下のようなコード。

if Chef::Config[:solo]
    # do something
else
    # do something else
end
  1. chef_zero を Test Kitchen の provisioner に使う際、 “fixture node objects” をテストデータとして使える。

  2. 後に Chef Server 構成を使いたくなった時にすんなり移行できる。

今すぐ Chef Solo をお払い箱にする必要はありませんが、公式に deprecated 扱いされているので、今後は Solo よりも Local Mode を使うことをお薦めします。これから Chef を始める人は、chef-apply か local mode を使うといいでしょう。

Vagrant で使う時はどうする?

Vagrant 1.7.0 より、Chef Client Local mode が使えるようになりました。単純に provisioner に chef_zero を指定するだけで動作します。

Chef Zero - Provisioning - Vagrant Documentation

Vagrant.configure("2") do |config|
  config.vm.provision "chef_zero" do |chef|
    # Specify the local paths where Chef data is stored
    chef.cookbooks_path = "cookbooks"
    chef.roles_path = "roles"
    chef.nodes_path = "nodes"

    # Add a recipe
    chef.add_recipe "apache"

    # Or maybe a role
    chef.add_role "web"
  end
end

参考