RFC | Title | Author | Status | Type |
---|---|---|---|---|
31 |
Replace chef-solo with chef-client local mode |
Joshua Timberman <joshua@chef.io> |
Accepted |
Standards Track |
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.
The 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 knife-solo
.
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-solo
with chef-client --local-mode
. Thechef-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 chef-solo
usage.
The local mode feature of chef-client
uses 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-client
with 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::Solo
and Chef::Application::Client
. This would create a single place to go for the application config - the Chef::Application::Client
class.
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.