YAMS – Yet Another Migration Script

I was asked if I could write a script that could be used for moving VMs to another data center location. Sounds easy right? Well, there were some specific requirements that made it a bit more challenging…

  • Downtime for the VMs should be kept to a minimum.
  • Some clusters re-use the current hardware while other clusters are getting new hardware.
  • Some clusters are merged with each other.

All ESXi clusters are stretched but the underlying storage layer is not stretched. Datastores are local to their location but can be synced so it looks like shared storage.

There are two datacenter locations and one of them needs to be dismantled. So a third location is introduced.

There are several different migration scenarios:

  • Place temporary hosts at the new location and perform a vMotion and Storage vMotion to those hosts.
  • Then relocate the old hosts to that location and perform a second vMotion from the temporary hosts to the old hosts.
  • Perform a Storage vMotion of the VMs in the second location to storage that is synced with the storage at the new, third location.
  • Move VMs to a new cluster by doing a vMotion and Storage vMotion from the first location to the new, third location.
  • Move VMs to a new cluster by doing a vMotion and Storage vMotion from the second location to new hosts at that same location.

And this must be possible with one script…

The code…