Add Foreman to existing Puppet 7 installation?

I have an existing Puppet 7 server and have been using Razor for provisioning for some time. But since it appears that Razor has been orphaned and left for dead, we are looking to stand up a Foreman server.

I know Foreman out of the box doesn’t work with Puppet 7, but is there a way to add a SmartProxy to an existing P7 server (which is also our Puppet CA)? I’ve installed Foreman on its own server and did not enable Puppet there. I’m not above doing some manual work or merging development code to make it work.

We also have a couple of FreeIPA servers that I’d like to add in too, but I don’t think that will pose as big of a challenge.

Our server suite now is:


I am not sure about the current Puppet 7 limitations, but it may be good to first mention what level of integration you want to achieve:

  • automate puppet agent bootstrapping during the provisioning
  • update hosts by receiving facts from every puppet run, e.g. OS version
  • receive report of each puppet run aka monitoring, e.g. seeing what has changed in last three runs, that on some host puppet hasn’t run for too long
  • use Foreman as the ENC, define what classes should be applied and their parameter values
  • maintain puppet modules and their versions on your puppet server (discouraged, dropped in most recent versions)

I am under the impression the first three should be possible to do with some manual configuration.

I’d like to use Foreman to drive our provisioning process, laying in a base OS and letting (or telling) Puppet to then build up the rest. That’s the only “must-have” capability for us right now and is the goal of this effort.

As for receiving facts, that might be nice. We haven’t had a central repository apart from PuppetDB to date so I can see value there but it’s not something we absolutely must have today. Run monitoring is something we do through Puppetboard right now, but I could also see shifting that to Foreman as well.

Foreman as ENC? Maybe someday.

Cool, in that case it should imho be possible. I think @ekohl will start puttin some instructions for this use case soon, perhaps he could work with you to test and verify the write up.

I think it’s @ekohl 's PR that I’ve already started playing with. :slight_smile: