We are still getting to know Foreman and Puppet, so not very representative, but here goes. We use host groups mostly to select and parameterize puppet classes that we build in-house (mostly wrappers to known modules and some custom things). In fact we discovered Foreman while learning about the Puppet ecosystem, and since we weren’t using server provisioning yet, we killed two birds with one stone.
So besides provisioning we are using Foreman as our main Puppet configurator. Not sure if it’s the best idea, and we’re already suffering with the fact that the latest Foreman stopped supporting the remote execution plugin in Debian 9, which we used for “Puppet Run”. (if any dev wants to look into this, examples are here and here.)
If Config Groups could hold Puppet class parameters (which would make a lot of sense given their name!), I guess we could live without host groups, but we’re trying to make good use of them in general including inheritance, which seems an important tool to keep our sanity as the infrastructure grows.