Vagrant, Puppet, VeeWee, Fog, and McCloud. This powerful set of tools allows for some of the most progressive ideas in the way of development and production automation to be realized. In the past month or so I have been studying these tools, and building my own infrastructure-as-code environment at work. Here is a short summary of each tool.
Vagrant is a VM manager that uses VirtualBox APIs in the background and provides a simple CLI controller to create, start, stop, suspend, and provision OVF images using Puppet/Chef/Shell scripts. It has a great Getting Started walk-through, and I highly recommend everyone add this to their tool chain.
Puppet is a provisioning tool that allows declarative infrastructure-as-code to bring an operating environment into the desired end state. Rather than scripting a series of steps, you tell it how you want the end result to be and it makes it so. My understanding is that this is in contrast to chef, which is a more procedural solution—but I’ve yet to use it first hand. I do quite like it, but I am already bumping into some walls related to tasks that should really be a once-off sequence of operations.
VeeWee is a utility to make creation of Vagrant boxes dead simple. It has a number of templates which can be used to script VirtualBox installations from an .iso image, and then package that freshly-installed state as an OVF image in the .box format. It may be seldom used, but it deserves an honorable mention since I have used it already. This one may not be as useful to the common developer, but it is quite straight forward to use.
Fog is an a Cloud API abstraction layer, that lets you script operations on a number of clouds in a general way. This allows one to script the creation and bootstrapping of machines and DNS entries. This is another must-know tool in this coming era of virtualization.
McCloud is a new and experimental “copy and paste job” that bolts Vagrant and Fog together, to allow automatic creation and provisioning of servers in the cloud in the same was as locally in VirtualBox via Vagrant. It currently only works with EC2, but I complain not. In my opinion, this is the logical conclusion of these tools—why should it make any difference if a virtual instance is local or remote? Now if only cloud services supported OVF images—that is the missing link to truly realize the McCloud.
2012 is going to be an interesting year, and I am excited to watch the lines between development / staging / production environments be further wiped away. Happy new year, indeed.