Is it possible to use a single VM image to run many guests, where each guest is a Windows Server OS (specifically Windows 2003R2 to begin with, we would evetually migrate to 2008R2 or whatever's up to date then), having installed exactly the same applications and same windows settings (hence the wish for a single image) but only differing in a few configuration files, and computername, IP-address, etc.
Edit Note: Windows Server isn't strictly a must for us. We could run the guests/nodes as XP or Win7 and it would also work.
So essentially I would like the guests to share a common "OS + app service" where all patches to the OS and applications only need to be administered once.
Each guest should however appear as a single separate server on the network (computername in the Domain, etc.) and each guest could have very slight configuration differences. (For eaxmple some guests would run service X and Y, and other guests would run service X and Z.)
Is this possible with any virtualization solution? What hardware is needed? What vendors support this? Is it a good idea after all (for Servers)?
Background: This is for our build server farm. Each build node should be exactly the same anyway, except for it's "identity" (computername, etc.) to make it accessible from the master build node. (And the master build node would be identical with but a few minor differences wrt. the build automation software.)
Not that I know of, and this is why:
The virtualization method that comes closest to what you describe is the kind used by things like Solaris Zones and OpenVZ. These are *nix systems of course, but it's still a useful example. VMs of this type share a kernel between all the VMs and the hosting OS, so when the host-OS kernel is patched all the VMs get the same patch applied (after the reboot-all-the-things step, of course). What they don't get to share are any of the file-system changes such as patches to libpam or any system libraries.
Windows is a different critter and is arguably even more dependent upon kernel/file interactions. It is even less able to do what you're doing than the *nix systems are. The biggest stumbling block is that machine identity is essentially kept in a monolithic file-backed, in-memory store rather than the files of a *nix system. This is a lot harder to change than "just a few files in /etc".
I'm not aware of any solution that would allow you to substitute the underlying bits of the master image and have them magically propagate to multiple slaved systems. However, you can achieve almost the same result if you're OK with rebuilding the slaves every time you patch the master, at a very low time and effort cost.
In our dev environment, we use vSphere, and we clone our master dev web and dev db servers with VMware Linked Clone functionality. You can't access it using regular GUI management tools, since linked clones exist mostly for use by VMware View (which allows for easy management of such solutions, but is not compatible with Windows Server OS); however, the API is available and supported, so it's possible to work with linked clones using scripts. The two available options are Perl-based http://download.virtuallyghetto.com/vGhettoLinkedClone.html and PowerCLI (VMware PowerShell extension) http://www.vmdev.info/?p=202.
Once you learn how to create linked clones, you will need to figure out a way to customize every clone you create. Unfortunately, I can't help you here, since our dev is all Linux, and customizing a Linux clone is trivial (for starters, none of that sysprep mess), but I know that automated Windows customization is still doable - basically, you have to accomplish the same thing that vCenter does when you create a regular clone of a Windows VM with vCenter Client.
This is not going to be a simple project, it took us a few weeks to get everything up and running smoothly, but now we can recreate our complete dev environment in a matter of minutes, while having to manage (patching, code and db schema updates, new app deployment) only two master VMs.
I'm not going to talk about hardware here, since it all depends on your specific needs: the size and number of servers, the developers' expectations regarding performance etc. Feel free to browse Serverfault for design recommendations for vSphere environments, you'll find plenty of good advice.
As a P.S., since I doubt this is a cost-effective path for any but the largest development houses, but would be inappropriate to omit: if you have tons of money, you can achieve View-like results with any OS using vCloud Director: http://www.vmware.com/products/vcloud-director/overview.html.
You can start with a master image, copy it as you require and then customize things like name and IP as you require. However, once you modify, you will need to manage patches per machine. If you are using VMware you can use VCenter to manage patching.