Cloud automation is important. When we have a need for a training instance, we use terraform for VM provisioning.
But: each setup has slight differences (SW Versions, Number of VMs needed, ...)
We decided to build the terraform code as abstract as possible and use a per setup data based approach to provide information on numbers of VMs and deployment order.
All data are then used in combination with terraform and Puppet Bolt.