The use of virtual images as a means of delivering enterprise-ready software is more or less a mainstream part of IT operations in today’s world. We see quite a few different types of software, from development tools to the applications they build, delivered as virtual machines through the activation of virtual images.
However, just because this practice is becoming standard operating procedure does not mean that everyone is doing it in the most effective manner. While enterprises have leveraged virtualization in many forms for years and years, the use cases are rapidly increasing in complexity. Enterprises are now creating virtual images whose components require advanced configuration and customization.
Given the rapid increase in use of virtual images coupled with the increasingly complex use cases, I thought I would share three things that will make your use of virtualization more effective:
1) Capture as much as possible in your virtual image: This seems obvious but is often over-looked. I cannot tell you how many times I hear a process described whereby someone activates a virtual image and then manually installs components once the virtual machine is up and running. Pre-install everything you can. Consider the case that you are creating a virtual image for an application server that you use. It is obvious that you will include an operating system and the application server software as part of the image, but also consider things like commonly used JDBC drivers, monitoring agents, diagnostic tools, etc. Otherwise, you will find yourself doing many of those annoying, manual, post-activation configuration actions.
2) Automate late-binding customization actions: No matter what you can preserve in the virtual image, there are likely to be things that you need to configure during the activation process. For example, maybe you installed monitoring agents in your virtual image and after activation of the image, you want those agents to report back to a centralized monitoring server. It is probably not ideal to burn the location of the monitoring server into the virtual image. Instead, during the activation process you will configure the agent to point to the monitor of your choosing. This configuration should an automated action that is part of the activation process. Again, eliminate post-activation configuration, even if you do not know the configuration bits until activation time.
3) Give yourself deploy-time wiggle room: So, you have burned in as much configuration as possible into the virtual image and put in place a framework that allows for the automation of late-binding customization actions, now what? Well, you need to parameterize the activation process. It is nice to automate late-binding customization actions per #2 above, but it is mostly meaningless without a mechanism that allows you to pass in configuration information at deployment time. The fact is that some information changes for each deployment or simply is unknown until deploy-time. Provide yourself a way in which to pass this information into the activation process.
That is my short list of things that could make your use of virtualization significantly more effective. If you were already doing these things, then I would say you are ahead of the game at this point. If you are not, then you may want to look at how you use virtualization and think about applying some of the concepts above.