I am new in using virtualization technologies. I have read about Puppet and Foreman. If I am not mistaken, these software are used to automate the process of installing and configuring servers, for both real machines and virtual machines. An example is shown in this video.
Refer to this website, in a cloud computing environment, we can create VM template and use it to deploy many VM with similar configurations. A VM template is a master copy of a virtual machine that can be used to create and provision virtual machines.
Refer to the Youtube video mentioned above, if we use Puppet and Foreman to install and configure VM, it seems that we need to repeat the installation and configuration process in all VM. Why can't we just use VM template?
Scalability and ongoing management are the main considerations...
A VM deployed from a template is just that; a facsimile of a master VM. Some items can be customized in a limited manner, but it's not an ideal approach. What about network settings, environment settings, application configuration, system roles? How about even basic items like setting the hostname or related IP settings?
What if you need to make a blanket change to all of your deployed virtual machines?
Coming from the VMware world, the VM cloning process isn't particularly-quick in most setups. For a Linux system with a net-enabled installation process, building anew is typically faster than cloning from a template.
There's also a case for using both approaches. Suppose you have a highly-customized template... You can use the virtualization system's cloning abilities to deploy, but leverage Puppet to fine-tune the install.
Each VM is unique, so you have to deploy each VM separately. Puppet and Foreman are (mainly) targeted for a lifecycle.
If you just want to get fast starting machines from scratch to do some testing (and perhaps after this dispose), you'd perhaps would like to have a look at vagrant
What do you really want to achieve?