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 に移行するべき理由
Local Mode なら Server-Client で使える全ての機能 — environments, roles, (encrypted) data bags — が使える。ノードやレシピの検索機能も使える。
特別なツールや knife プラグインは必要無い。
レシピ実行環境が Solo か Server かの分岐を書く必要が無くなる。例えば以下のようなコード。
if Chef::Config[:solo]
# do something
else
# do something else
end
chef_zero
を Test Kitchen の provisioner に使う際、 “fixture node objects” をテストデータとして使える。後に 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