The code is kicking off an async action (create a CloneVM_Task and give it to vSphere). We do that with all but the last one, which we call `wait_for_completion` on. We assume that cloning the last VM will finish after the other clone tasks have. (but when vSphere performance degrades we can see odd "Could not find VM" errors in the next section of code (where we assume all VMs have finished cloning).

To ensure we've cloned the VMs (and not synchronously called `wait_for_completion` on everyone) we can collect the tasks and pool vSphere for the status of the tasks. Here's a rough stab I took at it in the [vagrant integration](https://github.com/puppetlabs/vagrant-beaker/blob/master/lib/vagrant-beaker/provider/vsphere_actions/clone_template.rb#L163-L202).