During my endavours I had a situation where I had to provision 10 servers (install all of them manually and configure same things on all of them, same files etc).
There is a nice alternative to it called Stacki from StackIQ (bought by Teradata last year). What it offers is specialized PXE server that is used to boot baremetal/VM servers (CentOS/Redhat/Ubuntu).
Its architecture look as follows (Stacki server == Frontend, server to be provisioned == backend):
Firstly in CSV file you prepare a list of hosts with their MACs and as a next step you add puppet that will be used to provision the servers after booting.
More can be found here:
https://github.com/Teradata/stacki
Frontend machine can be a VM – actually it worked pretty nice – tested with provisioning other VMs.