I seem to come across two ways for using puppet in multiple environments:
1) Install a puppetmaster in each environment and only update the recipes from source control for that environment when ready to deploy the recipes in that environment.
2) Use one puppetmaster and use a variable in the puppet.conf of each client to specify the environment and then in the puppetmaster specify a different modulepath for each environment and each of those paths is updated to the branch of the recipe repository intended for that environment (e.g. dev, staging, production).
Only running one puppetmaster seems like it is one less piece of infrastructure to keep running but there is some additional complexity in the configuration.
Are there additional pros or cons to one of these methods or something which I'm missing entirely?