One of the useful tools for an upgrade situation is the Catalog Preview tool. It requires Puppet 3.8, which should be a much smaller jump for you (3.7 -> 3.8) to begin with. It'll probably help soothe worries for the ops team by allowing a level of testing and certainty before the big jump.
It's pretty rad, because it will compile catalogs in the Puppet 3 format, and compare them with catalogs compiled with "future parser" turned on, which was the Puppet 4 compatibility mode avaliable for Puppet 3 for helping to upgrade.
<Personal opinion>I generally recommend a cutover to a completely new infra, rather than trying to upgrade in place. This is more philosophical than technical, as it's probably easier if you have the server resources to create a new shiny Puppet 4 infra, then slowly just point old servers to the new shiny servers in batches, picking the easiest or least breaking servers first (eg. lab, dev, canary servers for testing) rather than trying to big-bang upgrade everything at once and worrying about rollback. But I know this can be a harder battle with change windows and getting everyone aligned.</Personal opinion>
In terms of automation, the new Bolt tool would be perfect for you here, as you can use bolt to run the commands needed to move servers to the new infra.
We have a
bootstrap task avaliable, but right now it's PE only (it uses a particular script we host to bootstrap Puppet, open-source support is coming in the future) but it wouldn't be too hard to just use bolt to either run a script (Such as my
https://github.com/petems/puppet-install-shell) or write your own organisational specific task to do the steps you need, and rollback if something goes wrong.
I'd also recommend the following talks and blogposts about Puppet 3->4 upgrades:
There's also the #upgraders room on the Puppet Slack channel if you have other questions :) Feel free to ping me there with questions, if I'm around I might be able to help (@petems)