Puppet and Provisioning KVM VMs

Problem:
I have been using Foreman/Katello for a couple months now, so far have managed to do unattended provisioning of VMs using Libvirt and use some puppet modules for custom configs on all the puppet agents.

I am now wanting to streamline a bit more and advance my use of Puppet with the following:
*Have the puppet agent install during provisioning and have the new node subscribe to katello
*Configure basic sysadmin tasks such as create a local user during provisioning, map smb shares (fstab entries) etc.

I currently have a script I have to run on each new machine to do the above but really want to learn how to do all this during provisioning.

Is the only way to do this by editing the templates? Are there any tutorials on doing this? I have been searching for a couple days and had no luck finding anything relevant to what I want to achieve.

Good to be a part of this community, thanks in advance.