Replace chef-solo's core with chef-client "local-mode," to run chef without an external Chef Server
As a Chef user, I want to run and use Chef without a server, so that I am using the same API and core features, and so that I can use any published cookbooks.
Case in point, the
chef-solo-search cookbook exists to provide search-like functionality so that users of
chef-solo can use public cookbooks unmodified.
knife-solo RubyGem exists to make it easier to distribute the parts of a "chef repository" to target nodes. However, it has a completely different workflow than what users who have a Chef Server use, leading to confusion and differences in help systems such as IRC and the mailing list.
Amazon Web Services "OpsWorks" uses
chef-solo as its implementation, which leads to issues with workflow and support similar to
There doesn't exist a clear and easy way for
chef-solo users to migrate to a
chef-client/Chef Server implementation and vice versa, due to the lack of "server" features.
This RFC proposes to replace
chef-client --local-mode. The
chef-solo command will continue to exist, and to the extent possible, work with existing solo-specific workflows without modification.
This means that
chef-solo using "local mode" must be 100% backwards-compatible with existing
The local mode feature of
chef-zero, an in-memory API-complete implementation of the Chef Server. This would give "solo" users the capability of performing searches, "saving" node objects, and easily saving and retrieving data bags. The
chef-zero server can persist data to disk, allowing that to be distributed to other nodes as necessary.
The application implementation of
chef-solo would be changed to invoke
Chef::Config[:local_mode] set to
true by default in the application class.
Chef has always had
chef-solo, a standalone recipe execution engine that can run recipes on nodes. However, as new
chef-client/Chef Server features are added, they slowly trickle down to
chef-solo, if they even get implemented at all. This makes
solo users unable to have complete consistency when consuming cookbooks from the community.
This will also simplify the codebase, as there is a great deal of duplication between
Chef::Application::Client. This would create a single place to go for the application config - the
This work is in the public domain. In jurisdictions that do not allow for this, this work is available under CC0. To the extent possible under law, the person who associated CC0 with this work has waived all copyright and related or neighboring rights to this work.