only run certain code if th respective service has been enabled
diff --git a/stack.sh b/stack.sh
index dcd6faf..86c5cc0 100755
--- a/stack.sh
+++ b/stack.sh
@@ -38,7 +38,7 @@
 MUNIN_DIR=$DEST/openstack-munin
 
 # Specify which services to launch.  These generally correspond to screen tabs
-ENABLED_SERVICES=${ENABLED_SERVICES:-g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-vnc,dash}
+ENABLED_SERVICES=${ENABLED_SERVICES:-g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-vnc,dash,mysql,rabbit}
 
 # Use the first IP unless an explicit is set by ``HOST_IP`` environment variable
 if [ ! -n "$HOST_IP" ]; then
@@ -130,17 +130,6 @@
 cd $DASH_DIR/django-openstack; sudo python setup.py develop
 cd $DASH_DIR/openstack-dashboard; sudo python setup.py develop
 
-# attempt to load modules: kvm (hardware virt) and nbd (network block 
-# device - used to manage qcow images)
-sudo modprobe nbd || true
-sudo modprobe kvm || true
-# user needs to be member of libvirtd group for nova-compute to use libvirt
-sudo usermod -a -G libvirtd `whoami`
-# if kvm wasn't running before we need to restart libvirt to enable it
-sudo /etc/init.d/libvirt-bin restart
-
-## FIXME(ja): should LIBVIRT_TYPE be kvm if kvm module is loaded?
-
 # add useful screenrc
 cp $DIR/files/screenrc ~/.screenrc
 
@@ -155,76 +144,89 @@
 # Dash currently imports quantum even if you aren't using it.  Instead 
 # of installing quantum we can create a simple module that will pass the 
 # initial imports
-sudo mkdir -p  $DASH_DIR/openstack-dashboard/quantum || true
-sudo touch $DASH_DIR/openstack-dashboard/quantum/__init__.py
-sudo touch $DASH_DIR/openstack-dashboard/quantum/client.py
+if [[ "$ENABLED_SERVICES" =~ "dash" ]]; then
+    sudo mkdir -p  $DASH_DIR/openstack-dashboard/quantum || true
+    sudo touch $DASH_DIR/openstack-dashboard/quantum/__init__.py
+    sudo touch $DASH_DIR/openstack-dashboard/quantum/client.py
 
-cd $DASH_DIR/openstack-dashboard
-sudo cp local/local_settings.py.example local/local_settings.py
-dashboard/manage.py syncdb
+    cd $DASH_DIR/openstack-dashboard
+    sudo cp local/local_settings.py.example local/local_settings.py
+    dashboard/manage.py syncdb
 
-# create an empty directory that apache uses as docroot
-sudo mkdir -p $DASH_DIR/.blackhole
+    # create an empty directory that apache uses as docroot
+    sudo mkdir -p $DASH_DIR/.blackhole
 
-## Configure apache's 000-default to run dashboard
-sudo cp $DIR/files/000-default.template /etc/apache2/sites-enabled/000-default
-sudo sed -e "s,%DASH_DIR%,$DASH_DIR,g" -i /etc/apache2/sites-enabled/000-default
+    ## Configure apache's 000-default to run dashboard
+    sudo cp $DIR/files/000-default.template /etc/apache2/sites-enabled/000-default
+    sudo sed -e "s,%DASH_DIR%,$DASH_DIR,g" -i /etc/apache2/sites-enabled/000-default
 
-# ``python setup.py develop`` left some files owned by root in ``DASH_DIR`` and
-# others by the original owner.  We need to change the owner to apache so
-# dashboard can run
-sudo chown -R www-data:www-data $DASH_DIR
+    # ``python setup.py develop`` left some files owned by root in ``DASH_DIR`` and
+    # others by the original owner.  We need to change the owner to apache so
+    # dashboard can run
+    sudo chown -R www-data:www-data $DASH_DIR
+fi
 
-# Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases:
-sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASS';"
 
-# Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and restart the mysql service:
-sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
-sudo service mysql restart
+# Mysql
+# ---------
+#
+if [[ "$ENABLED_SERVICES" =~ "mysql" ]]; then
+    # Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases:
+    sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASS';"
+
+    # Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and restart the mysql service:
+    sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
+    sudo service mysql restart
+fi
+
 
 # Munin
 # -----
 
-# allow connections from other hosts
-sudo sed -i -e '/Allow from localhost/s/localhost.*$/all/' /etc/munin/apache.conf
 
-cat >/tmp/nova <<EOF
+if [[ "$ENABLED_SERVICES" =~ "munin" ]]; then
+    # allow connections from other hosts
+    sudo sed -i -e '/Allow from localhost/s/localhost.*$/all/' /etc/munin/apache.conf
+
+    cat >/tmp/nova <<EOF
 [keystone_*]
 user `whoami`
 
 [nova_*]
 user `whoami`
 EOF
-sudo mv /tmp/nova /etc/munin/plugin-conf.d/nova
-
-# configure Munin for Nova plugins
-PLUGINS="keystone_stats nova_floating_ips nova_instance_launched nova_instance_ nova_instance_timing nova_services"
-for i in $PLUGINS; do
-  sudo cp -p $MUNIN_DIR/$i /usr/share/munin/plugins
-  sudo ln -sf /usr/share/munin/plugins/$i /etc/munin/plugins
-done
-sudo mv /etc/munin/plugins/nova_instance_ /etc/munin/plugins/nova_instance_launched
-sudo restart munin-node
+    sudo mv /tmp/nova /etc/munin/plugin-conf.d/nova
+    # configure Munin for Nova plugins
+    PLUGINS="keystone_stats nova_floating_ips nova_instance_launched nova_instance_ nova_instance_timing nova_services"
+    for i in $PLUGINS; do
+      sudo cp -p $MUNIN_DIR/$i /usr/share/munin/plugins
+      sudo ln -sf /usr/share/munin/plugins/$i /etc/munin/plugins
+    done
+    sudo mv /etc/munin/plugins/nova_instance_ /etc/munin/plugins/nova_instance_launched
+    sudo restart munin-node
+fi
 
 # Glance
 # ------
 
-# Glance uses ``/var/lib/glance`` and ``/var/log/glance`` by default, so
-# we need to insure that our user has permissions to use them.
-sudo mkdir -p /var/log/glance
-sudo chown -R `whoami` /var/log/glance 
-sudo mkdir -p /var/lib/glance
-sudo chown -R `whoami` /var/lib/glance
+if [[ "$ENABLED_SERVICES" =~ "g-reg" ]]; then
+    # Glance uses ``/var/lib/glance`` and ``/var/log/glance`` by default, so
+    # we need to insure that our user has permissions to use them.
+    sudo mkdir -p /var/log/glance
+    sudo chown -R `whoami` /var/log/glance 
+    sudo mkdir -p /var/lib/glance
+    sudo chown -R `whoami` /var/lib/glance
 
-# Delete existing images/database as glance will recreate the db on startup
-rm -rf /var/lib/glance/images/*
-# (re)create glance database
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE glance;' || true
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE glance;'
-# Copy over our glance-registry.conf
-GLANCE_CONF=$GLANCE_DIR/etc/glance-registry.conf
-cp $DIR/files/glance-registry.conf $GLANCE_CONF
-sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/glance,g" -i $GLANCE_CONF
+    # Delete existing images/database as glance will recreate the db on startup
+    rm -rf /var/lib/glance/images/*
+    # (re)create glance database
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE glance;' || true
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE glance;'
+    # Copy over our glance-registry.conf
+    GLANCE_CONF=$GLANCE_DIR/etc/glance-registry.conf
+    cp $DIR/files/glance-registry.conf $GLANCE_CONF
+    sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/glance,g" -i $GLANCE_CONF
+fi
 
 # Nova
 # ----
@@ -260,50 +262,70 @@
 screen -d -m -S nova -t nova
 sleep 1
 
-# setup nova instance directory
-mkdir -p $NOVA_DIR/instances
+if [[ "$ENABLED_SERVICES" =~ "n-cpu" ]]; then
 
-# if there is a partition labeled nova-instances use it (ext filesystems
-# can be labeled via e2label)
-## FIXME: if already mounted this blows up...
-if [ -L /dev/disk/by-label/nova-instances ]; then
-    sudo mount -L nova-instances $NOVA_DIR/instances
-    sudo chown -R `whoami` $NOVA_DIR/instances
+    # attempt to load modules: kvm (hardware virt) and nbd (network block 
+    # device - used to manage qcow images)
+    sudo modprobe nbd || true
+    sudo modprobe kvm || true
+    # user needs to be member of libvirtd group for nova-compute to use libvirt
+    sudo usermod -a -G libvirtd `whoami`
+    # if kvm wasn't running before we need to restart libvirt to enable it
+    sudo /etc/init.d/libvirt-bin restart
+
+    ## FIXME(ja): should LIBVIRT_TYPE be kvm if kvm module is loaded?
+
+    # setup nova instance directory
+    mkdir -p $NOVA_DIR/instances
+
+    # if there is a partition labeled nova-instances use it (ext filesystems
+    # can be labeled via e2label)
+    ## FIXME: if already mounted this blows up...
+    if [ -L /dev/disk/by-label/nova-instances ]; then
+        sudo mount -L nova-instances $NOVA_DIR/instances
+        sudo chown -R `whoami` $NOVA_DIR/instances
+    fi
+
+    # Clean out the instances directory
+    rm -rf $NOVA_DIR/instances/*
 fi
 
-# Clean out the instances directory
-rm -rf $NOVA_DIR/instances/*
+if [[ "$ENABLED_SERVICES" =~ "n-net" ]]; then
+    # delete traces of nova networks from prior runs
+    killall dnsmasq || true
+    rm -rf $NOVA_DIR/networks
+    mkdir -p $NOVA_DIR/networks
+fi
 
-# delete traces of nova networks from prior runs
-killall dnsmasq || true
-rm -rf $NOVA_DIR/networks
-mkdir -p $NOVA_DIR/networks
+if [[ "$ENABLED_SERVICES" =~ "mysql" ]]; then
+    # (re)create nova database
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE nova;' || true
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
+    $NOVA_DIR/bin/nova-manage db sync
 
-# (re)create nova database
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE nova;' || true
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE nova;'
-$NOVA_DIR/bin/nova-manage db sync
+    # create a small network
+    $NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 32
 
-# create a small network
-$NOVA_DIR/bin/nova-manage network create private $FIXED_RANGE 1 32
-
-# create some floating ips
-$NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE
+    # create some floating ips
+    $NOVA_DIR/bin/nova-manage floating create $FLOATING_RANGE
+fi
 
 # Keystone
 # --------
 
-# (re)create keystone database
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE keystone;' || true
-mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE keystone;'
+if [[ "$ENABLED_SERVICES" =~ "key" ]]; then
+    # (re)create keystone database
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'DROP DATABASE keystone;' || true
+    mysql -u$MYSQL_USER -p$MYSQL_PASS -e 'CREATE DATABASE keystone;'
 
-# FIXME (anthony) keystone should use keystone.conf.example
-KEYSTONE_CONF=$KEYSTONE_DIR/etc/keystone.conf
-cp $DIR/files/keystone.conf $KEYSTONE_CONF
-sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/keystone,g" -i $KEYSTONE_CONF
+    # FIXME (anthony) keystone should use keystone.conf.example
+    KEYSTONE_CONF=$KEYSTONE_DIR/etc/keystone.conf
+    cp $DIR/files/keystone.conf $KEYSTONE_CONF
+    sudo sed -e "s,%SQL_CONN%,$BASE_SQL_CONN/keystone,g" -i $KEYSTONE_CONF
 
-# initialize keystone with default users/endpoints
-BIN_DIR=$KEYSTONE_DIR/bin bash $DIR/files/keystone_data.sh
+    # initialize keystone with default users/endpoints
+    BIN_DIR=$KEYSTONE_DIR/bin bash $DIR/files/keystone_data.sh
+fi
 
 
 # Launch Services
@@ -324,9 +346,7 @@
 
 screen_it g-api "cd $GLANCE_DIR; bin/glance-api --config-file=etc/glance-api.conf"
 screen_it g-reg "cd $GLANCE_DIR; bin/glance-registry --config-file=etc/glance-registry.conf"
-# keystone drops a keystone.log where if it is run, so change the path to
-# where it can write
-screen_it key "cd /tmp; $KEYSTONE_DIR/bin/keystone --config-file $KEYSTONE_CONF"
+screen_it key "$KEYSTONE_DIR/bin/keystone --config-file $KEYSTONE_CONF"
 screen_it n-api "$NOVA_DIR/bin/nova-api"
 screen_it n-cpu "$NOVA_DIR/bin/nova-compute"
 screen_it n-net "$NOVA_DIR/bin/nova-network"
@@ -338,20 +358,21 @@
 # Install Images
 # ==============
 
-# Downloads a tty image (ami/aki/ari style), then extracts it.  Upon extraction 
-# we upload to glance with the glance cli tool.
+if [[ "$ENABLED_SERVICES" =~ "g-reg" ]]; then
+    # Downloads a tty image (ami/aki/ari style), then extracts it.  Upon extraction 
+    # we upload to glance with the glance cli tool.
+    mkdir -p $DEST/images
+    cd $DEST/images
+    if [ ! -f $DEST/tty.tgz ]; then
+        wget -c http://images.ansolabs.com/tty.tgz -O $DEST/tty.tgz
+    fi
 
-mkdir -p $DEST/images
-cd $DEST/images
-if [ ! -f $DEST/tty.tgz ]; then
-    wget -c http://images.ansolabs.com/tty.tgz -O $DEST/tty.tgz
+    # extract ami-tty/image, aki-tty/image & ari-tty/image
+    tar -zxf $DEST/tty.tgz
+
+    # add images to glance 
+    # FIXME: kernel/ramdisk is hardcoded - use return result from add
+    glance add name="tty-kernel" is_public=true container_format=aki disk_format=aki < aki-tty/image 
+    glance add name="tty-ramdisk" is_public=true container_format=ari disk_format=ari < ari-tty/image 
+    glance add name="tty" is_public=true container_format=ami disk_format=ami kernel_id=1 ramdisk_id=2 < ami-tty/image
 fi
-
-# extract ami-tty/image, aki-tty/image & ari-tty/image
-tar -zxf $DEST/tty.tgz
-
-# add images to glance 
-# FIXME: kernel/ramdisk is hardcoded - use return result from add
-glance add name="tty-kernel" is_public=true container_format=aki disk_format=aki < aki-tty/image 
-glance add name="tty-ramdisk" is_public=true container_format=ari disk_format=ari < ari-tty/image 
-glance add name="tty" is_public=true container_format=ami disk_format=ami kernel_id=1 ramdisk_id=2 < ami-tty/image