micro clouds

For a long time I've dreamed of a development environment that could easily spin up and down multiple lightweight containers wrapped around different service components. One way of doing this is with a tool called Vagrant [1], which will let me specify a base VM image for Virtualbox and then run chef or puppet recipes to configure the VM to match my webapp requirements and then automatically mounts my project source directly to be accessible inside the VM, does port mapping, and other magic. It's amazing, a little too heavyweight, doesn't scale to multiple containers to match production. You can see a toy project I did using Vagrant [3], it's pretty neat to see the whole environment build up from nothing.

In the last release of OpenStack (shipped in Ubuntu 11.04), it supports a very lightweight and fast container/virtualization technology called LXC [2]. If you are familiar with FreeBSD jails or Solaris containers they have many similarities. This means that it is practical to run a dozen or more OpenStack VMs backed by LXC on a typical laptop. Another cool feature is that you can run LXC containers inside EC2 machines - in fact this is how cucumber-chef does acceptance testing of server configuration recipes [3].

I wonder if the default Launchpad.net developer setup could be changed to run in LXC managed by OpenStack? I imagine there would be many steps along the way, and perhaps the first one would be to use a single container, perhaps splitting out more containers as the Launchpad services rearchitecture moves along. We'd also need a HOWTO for installing and configuring OpenStack on Ubuntu 11.04 and grabbing a suitable Ubuntu 10.04.2 base image (to best match the Launchpad production servers). I am anxious for the day when I could decide to work on a Launchpad feature without needing to trash my local SSH, Apache, and Postgres configs - my involvement in projects is so infrequent and wide-ranging that I can't really afford to have a dedicated Launchpad dev machine these days. Basically I want to have the default Launchpad dev setup be something that lets me run a script on a brand new Ubuntu laptop or a fresh EC2 instance and after a few minutes get the entire environment configured running with containers, and then also lets me do things like swap out service implementations by changing container configuration.

OpenStack is making heavy use of Launchpad, is a rising star in data centers around the world and is under active development, so it seems the ideal time to start using OpenStack for micro cloud development environments. What do you think?

[1] http://vagrantup.com/
[2] http://www.openstack.org/blog/2011/04/openstack-announces-cactus-release/
[3] https://code.launchpad.net/~statik/+junk/gpg-val
[4] https://github.com/Atalanta/cucumber-chef