Details
-
Epic
-
Status: Closed
-
Normal
-
Resolution: Fixed
-
None
-
None
-
None
-
Unblock puppet-agent gem dependencies
-
Platform OS
-
Done
-
New Feature
-
Packaging changes allow puppetserver to load pure ruby gems from puppet-agent's /opt/puppetlabs/puppet/lib/ruby/vendor_gems directory.
-
Needs Assessment
Description
JRuby cannot load gems with native extensions. To avoid that issue, puppetserver maintains a set of gems separate from puppet-agent. However, this means if puppet-agent (or puppet) adds a hard dependency on a gem like semantic_puppet or multi_json then the puppet-agent package will be incompatible with puppetserver. Since we don't have packaging constraints to prevent newer puppet-agent packages to be installed with older puppetserver, we haven't been able to move forward with unvendoring semantic_puppet or adding a dependency with multi_json. This is also an issue for moving non-core types and providers, as puppetserver needs access to the types for compilation.
We need to figure out a way that we can add and remove hard gem dependencies to puppet (or other puppet-agent components) without breaking puppetserver.
One approach we've discussed is to have puppet-agent package pure ruby gems into a specific directory, that both puppet-agent and puppetserver can load from.
Another approach is for puppetserver to vendor the puppet ruby code (as a library) and to install its transitive dependencies.