What is the recommended way to version VMware Templates?
Solution 1:
I think you are trying to solve your problem with the wrong tools. VMware templates are very similar to traditional operating system images. They exist to really do two things: 1) Provide a consistent known-good base that all of your servers start with and 2) reduce the repetition of administrative tasks required to go from installation media to that known-good state. You build your template to meet the most common configuration across your fleet. If you have so many different needs that your "common denominator" template is so spare that there is a huge gap between the template and the desired state you have to start doing the math to determine whether the effort to maintain multiple templates is worth the effort you saved in terms of the tasks it takes to go from your "common denominator" template to your specialized template. In my experience, maintaining multiple templates or images is often much more effort than the effort required to perform the configuration. As you have discovered maintaining different templates this way is a logarithmic curve and not a linear one - especially in a heterogeneous environment. This is why imaging works so well for desktops but is less useful for servers.
Your solution rests in reducing of the effort of the tasks it takes to go from your "common denominator" template to your specialized desired configuration. This is essentially configuration management. In the Windows ecosystem you are looking at tools like GPOs, PowerShell DSC, and SCCM. I'm less familiar with the enterprise tools in the Linux world but something like Puppet or Chef should work.
Using templates or images to reduce configuration effort is often a losing game if there is significant diversity in your desired end-state configuration.
If your deadset for using templates for this, you are going to need to construct some scripts, likely with PowerCLI, to perform the tasks of snapshotting, modifying and copying the template and marking it with a version or putting it into some kind of versioning system that can handle files of this size. Again, I suspect the effort of solving your problem this way is less than using some kind of configuration management system.