switch to single pass script
diff --git a/stack.sh b/stack.sh
index 00bb891..8d71f75 100755
--- a/stack.sh
+++ b/stack.sh
@@ -10,7 +10,6 @@
 
 DIR=`pwd`
 DEST=/opt
-CMD=$1
 
 # Set the destination directories for openstack projects
 NOVA_DIR=$DEST/nova
@@ -41,95 +40,91 @@
 # TODO: switch to mysql for all services
 SQL_CONN=sqlite:///$NOVA_DIR/nova.sqlite
 
-# FIXME: commands should be: stack.sh all or list of services to install/run
+# FIXME: commands should be: stack.sh should allow specifying a subset of services
 
-# You should only have to run this once
-if [ "$CMD" == "install" ]; then
-    # install apt requirements
-    apt-get install -y -q `cat $DIR/apts/* | cut -d\# -f1`
+# install apt requirements
+apt-get install -y -q `cat $DIR/apts/* | cut -d\# -f1`
 
-    # install python requirements
-    pip install `cat $DIR/pips/*`
+# install python requirements
+pip install `cat $DIR/pips/*`
 
-    # compute service
-    git clone https://github.com/cloudbuilders/nova.git $NOVA_DIR
-    # image catalog service
-    git clone https://github.com/cloudbuilders/glance.git $GLANCE_DIR
-    # unified auth system (manages accounts/tokens)
-    git clone https://github.com/cloudbuilders/keystone.git $KEYSTONE_DIR
-    # a websockets/html5 or flash powered VNC console for vm instances
-    git clone https://github.com/cloudbuilders/noVNC.git $NOVNC_DIR
-    # django powered web control panel for openstack
-    git clone https://github.com/cloudbuilders/openstack-dashboard.git $DASH_DIR
-    # python client library to nova that dashboard (and others) use
-    git clone https://github.com/cloudbuilders/python-novaclient.git $NOVACLIENT_DIR
-    # openstackx is a collection of extensions to openstack.compute & nova 
-    # that is *deprecated*.  The code is being moved into python-novaclient & nova.
-    git clone https://github.com/cloudbuilders/openstackx.git $API_DIR
+# compute service
+git clone https://github.com/cloudbuilders/nova.git $NOVA_DIR
+# image catalog service
+git clone https://github.com/cloudbuilders/glance.git $GLANCE_DIR
+# unified auth system (manages accounts/tokens)
+git clone https://github.com/cloudbuilders/keystone.git $KEYSTONE_DIR
+# a websockets/html5 or flash powered VNC console for vm instances
+git clone https://github.com/cloudbuilders/noVNC.git $NOVNC_DIR
+# django powered web control panel for openstack
+git clone https://github.com/cloudbuilders/openstack-dashboard.git $DASH_DIR
+# python client library to nova that dashboard (and others) use
+git clone https://github.com/cloudbuilders/python-novaclient.git $NOVACLIENT_DIR
+# openstackx is a collection of extensions to openstack.compute & nova 
+# that is *deprecated*.  The code is being moved into python-novaclient & nova.
+git clone https://github.com/cloudbuilders/openstackx.git $API_DIR
 
-    # setup our checkouts so they are installed into python path
-    # allowing `import nova` or `import glance.client`
-    cd $NOVACLIENT_DIR; python setup.py develop
-    cd $KEYSTONE_DIR; python setup.py develop
-    cd $GLANCE_DIR; python setup.py develop
-    cd $API_DIR; python setup.py develop
-    cd $DASH_DIR/django-openstack; python setup.py develop
-    cd $DASH_DIR/openstack-dashboard; python setup.py develop
+# setup our checkouts so they are installed into python path
+# allowing `import nova` or `import glance.client`
+cd $NOVACLIENT_DIR; python setup.py develop
+cd $KEYSTONE_DIR; python setup.py develop
+cd $GLANCE_DIR; python setup.py develop
+cd $API_DIR; python setup.py develop
+cd $DASH_DIR/django-openstack; python setup.py develop
+cd $DASH_DIR/openstack-dashboard; python setup.py develop
 
-    # attempt to load modules: kvm (hardware virt) and nbd (network block 
-    # device - used to manage qcow images)
-    modprobe nbd || true
-    modprobe kvm || true
-    # if kvm wasn't running before we need to restart libvirt to enable it
-    /etc/init.d/libvirt-bin restart
+# attempt to load modules: kvm (hardware virt) and nbd (network block 
+# device - used to manage qcow images)
+modprobe nbd || true
+modprobe kvm || true
+# if kvm wasn't running before we need to restart libvirt to enable it
+/etc/init.d/libvirt-bin restart
 
-    # setup nova instance directory
-    mkdir -p $NOVA_DIR/instances
+# 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)
-    if [ -L /dev/disk/by-label/nova-instances ]; then
-        mount -L nova-instances /$NOVA_DIR/instances
-    fi
-
-    # *Dashboard*: setup django application to serve via apache/wsgi
-
-    # 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
-    mkdir $DASH_DIR/openstack-dashboard/quantum
-    touch $DASH_DIR/openstack-dashboard/quantum/__init__.py
-    touch $DASH_DIR/openstack-dashboard/quantum/client.py
-    # local_settings has 
-    cd $DASH_DIR/openstack-dashboard
-    cp local/local_settings.py.example local/local_settings.py
-    dashboard/manage.py syncdb
-
-    # # Setup Apache
-    # create an empty directory to use as our 
-    mkdir $DASH_DIR/.blackhole
-    # FIXME(ja): can't figure out how to make $DASH_DIR work in sed, also install to available/a2e it 
-    cat $DIR/files/000-default.template | sed 's/%DASH_DIR%/\/opt\/dash/g' > /etc/apache2/sites-enabled/000-default
-
-    chown -R www-data:www-data $DASH_DIR
-
-    mkdir -p /var/log/glance
-
-    # prepare initial images for loading into glance
-    if [ ! -f $DEST/tty.tgz ]; then
-        wget -c http://images.ansolabs.com/tty.tgz -O $DEST/tty.tgz
-    fi
-
-    mkdir -p $DEST/images
-    tar -C $DEST/images -zxf $DEST/tty.tgz
-
-    # add useful screenrc
-    cp $DIR/files/screenrc ~/.screenrc
-
-    # TODO: update current user to allow sudo for all commands in files/sudo/*
-    exit
+# if there is a partition labeled nova-instances use it (ext filesystems
+# can be labeled via e2label)
+if [ -L /dev/disk/by-label/nova-instances ]; then
+    mount -L nova-instances /$NOVA_DIR/instances
 fi
 
+# *Dashboard*: setup django application to serve via apache/wsgi
+
+# 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
+mkdir $DASH_DIR/openstack-dashboard/quantum
+touch $DASH_DIR/openstack-dashboard/quantum/__init__.py
+touch $DASH_DIR/openstack-dashboard/quantum/client.py
+# local_settings has 
+cd $DASH_DIR/openstack-dashboard
+cp local/local_settings.py.example local/local_settings.py
+dashboard/manage.py syncdb
+
+# ## Setup Apache
+# create an empty directory to use as our 
+mkdir $DASH_DIR/.blackhole
+# FIXME(ja): can't figure out how to make $DASH_DIR work in sed, also install to available/a2e it 
+cat $DIR/files/000-default.template | sed 's/%DASH_DIR%/\/opt\/dash/g' > /etc/apache2/sites-enabled/000-default
+
+chown -R www-data:www-data $DASH_DIR
+
+mkdir -p /var/log/glance
+
+# prepare initial images for loading into glance
+if [ ! -f $DEST/tty.tgz ]; then
+    wget -c http://images.ansolabs.com/tty.tgz -O $DEST/tty.tgz
+fi
+
+mkdir -p $DEST/images
+tar -C $DEST/images -zxf $DEST/tty.tgz
+
+# add useful screenrc
+cp $DIR/files/screenrc ~/.screenrc
+
+# TODO: update current user to allow sudo for all commands in files/sudo/*
+
 NL=`echo -ne '\015'`
 
 function screen_it {
@@ -143,89 +138,71 @@
     echo "$1" >> $NOVA_DIR/bin/nova.conf
 }
 
-if [ "$CMD" == "run" ] || [ "$CMD" == "run_detached" ]; then
-
-    # (re)create nova.conf
-    rm -f $NOVA_DIR/bin/nova.conf
-    add_nova_flag "--verbose"
-    add_nova_flag "--nodaemon"
-    add_nova_flag "--dhcpbridge_flagfile=$NOVA_DIR/bin/nova.conf"
-    add_nova_flag "--network_manager=nova.network.manager.$NET_MAN"
-    add_nova_flag "--my_ip=$HOST_IP"
-    add_nova_flag "--public_interface=$INTERFACE"
-    add_nova_flag "--vlan_interface=$INTERFACE"
-    add_nova_flag "--sql_connection=$SQL_CONN"
-    add_nova_flag "--libvirt_type=$LIBVIRT_TYPE"
-    add_nova_flag "--osapi_extensions_path=$API_DIR/extensions"
-    add_nova_flag "--vncproxy_url=http://$HOST_IP:6080"
-    add_nova_flag "--vncproxy_wwwroot=$NOVNC_DIR/noVNC/noVNC"
-    add_nova_flag "--api_paste_config=$KEYSTONE_DIR/examples/paste/nova-api-paste.ini"
-    add_nova_flag "--image_service=nova.image.glance.GlanceImageService"
-    if [ -n "$FLAT_INTERFACE" ]; then
-        add_nova_flag "--flat_interface=$FLAT_INTERFACE"
-    fi
-
-    # create a new named screen to store things in
-    screen -d -m -S nova -t nova
-    sleep 1
-
-    # Clean out the instances directory
-    rm -rf $NOVA_DIR/instances/*
-
-    # delete traces of nova networks from prior runs
-    killall dnsmasq || true
-    rm -rf $NOVA_DIR/networks
-    mkdir -p $NOVA_DIR/networks
-
-    # (re)create nova database
-    rm -f $NOVA_DIR/nova.sqlite
-    $NOVA_DIR/bin/nova-manage db sync
-
-    # initialize keystone with default users/endpoints
-    # FIXME(ja): move initial_data.sh into this script
-    rm -f /opt/keystone/keystone.db
-    curl -OL https://raw.github.com/cloudbuilders/deploy.sh/master/initial_data.sh
-    BIN_DIR=$KEYSTONE_DIR/bin bash initial_data.sh
-
-    # 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
-
-    # delete existing glance images/database.  Glance will recreate the db
-    # when it is ran.
-    rm -rf /var/lib/glance/images/*
-    rm -f $GLANCE_DIR/glance.sqlite
-
-    screen_it n-api "$NOVA_DIR/bin/nova-api"
-    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"
-    screen_it cpu "$NOVA_DIR/bin/nova-compute"
-    screen_it net "$NOVA_DIR/bin/nova-network"
-    screen_it sched "$NOVA_DIR/bin/nova-scheduler"
-    screen_it key "$KEYSTONE_DIR/bin/keystone --config-file $KEYSTONE_DIR/etc/keystone.conf"
-    screen_it vnc "$NOVA_DIR/bin/nova-vncproxy"
-    screen_it dash "/etc/init.d/apache2 restart; tail -f /var/log/apache2/error.log"
-
-    # FIXME: switch to just importing images
-    # remove previously converted images
-    rm -rf $DIR/images/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
-    $NOVA_DIR/bin/nova-manage image convert $DIR/images
-
-    if [ "$CMD" != "run_detached" ]; then
-      screen -S nova -x
-    fi
+# (re)create nova.conf
+rm -f $NOVA_DIR/bin/nova.conf
+add_nova_flag "--verbose"
+add_nova_flag "--nodaemon"
+add_nova_flag "--dhcpbridge_flagfile=$NOVA_DIR/bin/nova.conf"
+add_nova_flag "--network_manager=nova.network.manager.$NET_MAN"
+add_nova_flag "--my_ip=$HOST_IP"
+add_nova_flag "--public_interface=$INTERFACE"
+add_nova_flag "--vlan_interface=$INTERFACE"
+add_nova_flag "--sql_connection=$SQL_CONN"
+add_nova_flag "--libvirt_type=$LIBVIRT_TYPE"
+add_nova_flag "--osapi_extensions_path=$API_DIR/extensions"
+add_nova_flag "--vncproxy_url=http://$HOST_IP:6080"
+add_nova_flag "--vncproxy_wwwroot=$NOVNC_DIR/noVNC/noVNC"
+add_nova_flag "--api_paste_config=$KEYSTONE_DIR/examples/paste/nova-api-paste.ini"
+add_nova_flag "--image_service=nova.image.glance.GlanceImageService"
+if [ -n "$FLAT_INTERFACE" ]; then
+    add_nova_flag "--flat_interface=$FLAT_INTERFACE"
 fi
 
-if [ "$CMD" == "run" ] || [ "$CMD" == "terminate" ]; then
-    virsh list | grep i- | awk '{print $1}' | xargs -n1 virsh destroy
-    $NOVA_DIR/tools/clean-vlans
-    echo "FIXME: clean networks?"
-fi
+# create a new named screen to store things in
+screen -d -m -S nova -t nova
+sleep 1
 
-if [ "$CMD" == "run" ] || [ "$CMD" == "clean" ]; then
-    screen -S nova -X quit
-    rm -f *.pid*
-fi
+# Clean out the instances directory
+rm -rf $NOVA_DIR/instances/*
+
+# delete traces of nova networks from prior runs
+killall dnsmasq || true
+rm -rf $NOVA_DIR/networks
+mkdir -p $NOVA_DIR/networks
+
+# (re)create nova database
+rm -f $NOVA_DIR/nova.sqlite
+$NOVA_DIR/bin/nova-manage db sync
+
+# initialize keystone with default users/endpoints
+# FIXME(ja): move initial_data.sh into this script
+rm -f /opt/keystone/keystone.db
+curl -OL https://raw.github.com/cloudbuilders/deploy.sh/master/initial_data.sh
+BIN_DIR=$KEYSTONE_DIR/bin bash initial_data.sh
+
+# 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
+
+# delete existing glance images/database.  Glance will recreate the db
+# when it is ran.
+rm -rf /var/lib/glance/images/*
+rm -f $GLANCE_DIR/glance.sqlite
+
+screen_it n-api "$NOVA_DIR/bin/nova-api"
+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"
+screen_it cpu "$NOVA_DIR/bin/nova-compute"
+screen_it net "$NOVA_DIR/bin/nova-network"
+screen_it sched "$NOVA_DIR/bin/nova-scheduler"
+screen_it key "$KEYSTONE_DIR/bin/keystone --config-file $KEYSTONE_DIR/etc/keystone.conf"
+screen_it vnc "$NOVA_DIR/bin/nova-vncproxy"
+screen_it dash "/etc/init.d/apache2 restart; tail -f /var/log/apache2/error.log"
+
+# FIXME: switch to just importing images
+# remove previously converted images
+rm -rf $DIR/images/[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
+$NOVA_DIR/bin/nova-manage image convert $DIR/images