run migrate for django 1.7 or evolve for django 1.5
[plstackapi.git] / planetstack / scripts / opencloud
index 63b6440..b307e66 100755 (executable)
@@ -5,24 +5,39 @@ if [ -z "$1" ]; then
     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..."
@@ -31,38 +46,123 @@ function dropdb {
 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 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 {
-    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 {
-    echo "Saving off OpenCloud data to /opt/planetstack/initial_data.json. Please compare against /opt/planetstack/core/fixtures/initial_data.json to be sure of replacing these changes as the default initialization values."
-    python manage.py dumpdata core hpc syndicate requestrouter --indent 4 > /opt/planetstack/initial_data.json
+    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
-    runserver
+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
+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