#!/bin/sh
if [ -z "$1" ]; then
- echo usage: $0 "[initdb | resetdb ]"
+ echo usage: $0 "[initdb | createdb | dropdb | syncdb | runserver | resetdb | dumpdata]"
exit
fi
+BACKUP_DIR=/opt/planetstack_backups
+
+DJANGO_17=`python -c "import django; from distutils.version import StrictVersion; print int(StrictVersion(django.get_version()) >= StrictVersion('1.7'))"`
+
cd /opt/planetstack
-function initdb {
- #Figure out if the script is running on Fedora 16 or 17
- if grep 16 /etc/fedora-release; then
+function ensure_postgres_running {
+ # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work
+ # right on Vicci, so let's try to detect it by seeing if the port is
+ # being listened on
+
+ netstat -nl | grep -i ":5432 "
+ if [[ $? == 0 ]]; then
+ echo "Postgres is already running"
+ return
+ fi
+
+ /sbin/service postgresql initdb
+ /sbin/service postgresql start
+ /sbin/chkconfig postgresql on
+
+ netstat -nl | grep -i ":5432 "
+ if [[ $? != 0 ]]; then
+ # it's still not running
+ echo "Trying fallback mechanism to start Postgres"
sudo -u postgres initdb -D /var/lib/pgsql/data/
sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start
- else
- #Try normal Fedora 17 commands
- echo "Trying Fedora 17 commands" > /dev/stdout
- /sbin/service postgresql initdb
- /sbin/service postgresql start
- /sbin/chkconfig postgresql on
fi
+
}
function createdb {
echo "Creating OpenCloud database..."
- sudo -u postgres createdb planetstack
+ sudo -u postgres createdb planetstack
}
function dropdb {
echo "Dropping OpenCloud database..."
function syncdb {
echo "Syncing OpenCloud services..."
python /opt/planetstack/manage.py syncdb --noinput
+ if [[ $DJANGO_17 ]]; then
+ echo "Loading initial data from fixture..."
+ python /opt/planetstack/manage.py --noobserver --nomodelpolicy loaddata /opt/planetstack/core/fixtures/initial_data.json
+ fi
+}
+function evolvedb {
+ echo "Evolving OpenCloud services..."
+ python /opt/planetstack/manage.py evolve --hint --execute --noinput
+}
+function migratedb {
+ echo "Migrating OpenCloud services..."
+ python /opt/planetstack/manage.py migrate
+}
+function stopserver {
+ echo "Stopping any running OpenCloud Service(s)"
+ pkill -f "python.*runserver"
}
function runserver {
-# python manage.py runserver 128.95.1.128:8000
- echo "Starting OpenCloud Service on $HOSTNAME:8000"
- python manage.py runserver $HOSTNAME:8000&
+ PUBLIC_HOSTNAME=`/opt/planetstack/planetstack-config.py get server_hostname $HOSTNAME`
+ echo "Starting OpenCloud Service on $PUBLIC_HOSTNAME:8000"
+ python manage.py runserver $PUBLIC_HOSTNAME:8000&
+}
+
+function dumpdata {
+ mkdir -p $BACKUP_DIR
+ FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
+ echo "Saving data to $FN"
+ python manage.py dumpdata core hpc syndicate_storage requestrouter -a --indent 4 > $FN
+ if [[ ! -f $FN ]]; then
+ echo "FAILED to create $FN"
+ exit
+ fi
+ SIZE=$(du -k "$FN" | cut -f 1)
+ if [[ $SIZE -lt 9 ]]; then
+ echo "Dumpdata was empty. Deleting and aborting"
+ rm $FN
+ exit
+ fi
+ rm -f $BACKUP_DIR/dumpdata-latest.json
+ ln -s $FN $BACKUP_DIR/dumpdata-latest.json
+}
+
+function genkeys {
+ mkdir -p public_keys
+ mkdir -p private_keys
+ echo "Generating keys"
+ keyczart create --location=private_keys --name="OpenCloud" --purpose=crypt --asymmetric=rsa
+ keyczart addkey --location=private_keys --status=primary --size=1024
+ keyczart pubkey --location=private_keys --destination=public_keys
+ if [[ ! -f public_keys/1 ]]; then
+ echo "FAILED to create keys"
+ exit
+ fi
}
COMMAND=$1
if [ "$COMMAND" = "initdb" ]; then
- initdb
+ stopserver
+ ensure_postgres_running
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "repairdb" ]; then
+ stopserver
+ ensure_postgres_running
+ dumpdata
+ # TODO: This is where we could run migration scripts to upgrade the
+ # dumped data to the new models.
+ mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
+ dropdb
+ createdb
+ syncdb
+fi
+if [ "$COMMAND" = "restoredb" ]; then
+ if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
+ echo There is no dumpdata to restore
+ exit
+ fi
+ stopserver
+ ensure_postgres_running
+ mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
+ dropdb
createdb
syncdb
- runserver
+fi
+if [ "$COMMAND" = "evolvedb" -o "$COMMAND" = "migratedb" ]; then
+ stopserver
+ ensure_postgres_running
+ if [[ $DJANGO_17 ]]; then
+ migratedb
+ else
+ evolvedb
+ fi
fi
if [ "$COMMAND" = "resetdb" ]; then
+ stopserver
dropdb
createdb
syncdb
- runserver
fi
if [ "$COMMAND" = "syncdb" ]; then
+ stopserver
syncdb
- runserver
fi
if [ "$COMMAND" = "runserver" ]; then
+ stopserver
runserver
fi
-
+if [ "$COMMAND" = "stopserver" ]; then
+ stopserver
+fi
+if [ "$COMMAND" = "dumpdata" ]; then
+ dumpdata
+fi
+if [ "$COMMAND" = "genkeys" ]; then
+ genkeys
+fi