Vmware copy production server to a test server

vmware-esxvmware-esxiwindows-server-2008

We are currently using Vmware infrastructure at my work where all our production servers are virtual. At the moment we are not having any good test servers and I have been thinking that it should be easy to create them based on our production servers, so I want to present my idea in order to see if it is possible and if you recommend any other solution instead.

So the idea is (without knowing if every step is possible)

  1. Clone the Production server periodically
  2. Change the computer name to test and attach the test server to the domain
  3. Delay the upstart of windows, in order to run a script that will remove all production configs and add the test configs if they exist
  4. Start up the server and have our test server ready for use

In this way we would always have our test server in sync with our production server. Would this be possible to accomplish with Vmware and windows 2008 RC servers, and do you have any other ideas of how to keep the test and production server in sync?

Best Answer

Everything you have described is possible -- My suggestion would be to back up the production virtual machines and transfer them to a development vmware host that isn't connected to your normal network, scrub and sanitize the VMs so they're on your test network, and then follow good development practices from then on out (snapshot test before any major changes; do everything in test before promoting to production & keep a list of the changes that need to be made to production.

You can always follow these steps again at any point to "re-sync" production and test, but by not forcibly re-syncing test and production you give yourself more freedom to play with your development.
Also note that since it's VMWare you can clone production again and make a staging environment where you test everything necessary to move from Production's current code base to what just got finished in Dev. You can even swap over Staging and production as part of your deployment, so you always have a clean version of the previous production code to revert to if something blows up.