In reply to Chris Jones (@MyFavouriteCake).
Thanks Chris.
One detail of our provisioner that I didn't go into (and probably should have) is that it sets the appropriate Facter environment variables to declare the class of machine (front end, back end, cache, support, database, etc) and the platform (our current terminology for test/staging/production). That's how the subsequent puppet run knows what to install on that machine and what its relationships with other instances is.