Including a role class or using host groups

Hi all,

I'm wondering if it would be best practise to use host groups instead of
creating a role class that manages module logic.

I've tried creating a parameterized class called site::role::nameserver
that overwrites paramaters of the ntp module and then using Foreman to
manage the site::role::nameserver paramaters, but I can't seem to get it
right. From what I can see this is how Hiera would work. The reason for
this is I want to avoid having to create a Foreman host group for each
environment. From what I can see I'll need to create a host group for
staging and a separate one for production as I need to define an
environment in order to access modules in Foreman?

What would others recommend as best practise? I don't want my Puppet
environment to become unmanageable.