Tool to quickly deploy openstack dev environments

Be sure to carefully read these scripts before you run them as they install software and may alter your networking configuration.

# To start a dev cloud on your local machine (installing on a dedicated vm is safer!):

    ./stack.sh

# To start a dev cloud in an lxc container:

    ./build_lxc.sh

You will need to configure a bridge and network on your host machine (by default br0) before starting build_lxc.sh.  A sample host-only network configuration can be found in lxc_network_hostonlyplusnat.sh.

# Todo

* Add python-novaclient cli support
* move keystone/glance/dash to mysql
* syslog
* check openstack-puppet recipes to see if anything else is missing
* allow rabbit connection to be specified via environment variables with sensible defaults
* Add volume support
* allow changing of git locations (specify different tag/branch or repos)
* change method of invoking stack.sh to ./stack.sh all _or_ ./stack.sh nova-compute,nova-network,nova-api,nova-volume
* Add quantum support

# Done

* sqlconn can be set via env
* move back to using sudo
* move nova to mysql
* munin
* image upload with a script that supports generating images via debootstrap (ubuntu-vm-builder)

# Future

* idea: move from screen to tmux?
* idea: create a live-cd / vmware preview image using this?
* idea: use lxc to make the proto-image have everything?  so launching a new server is just turn on / updating / run?
