At the community meeting last week we talked a little about making the smart-proxy "pluggable" - namely able to be extended by gems. One example use case is adding DNS management by a third party, like Route 53 or Dynect. Another reason this would be nice is to make the proxy even smaller; there's no reason for something like a DHCP or DNS server to have to include all the Puppet, CA, TFTP, and other code; this is more a secondary benefit than a primary motivation, IMO.
I started implementing a design a couple months ago, but have unfortunately been wrapped up working on other stuff since then. The idea behind the refactoring I started was two-fold:
- Turn the proxy into an autoloader that exposes API endpoints that are stored in gems.
- Move some stuff to be an "internal gem" (basically just library code that's well abstracted) and other things get completely removed from the proxy into gems on rubygems.org with names like foreman-proxy-dhcp.
So the first part is relatively straight forward, but the second item requires some more thought. What do you all think should be included in the proxy by default? Here's my list:
- Puppet CA
The reason I chose those three is that they are what's needed to setup a basic "all-in-one" system.
So that's what's on my mind with making the proxy pluggable - a little vague, but that's why I'm sending this email