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