turn off native drupal user registration upon service plc (re)start
[myplc.git] / plc.d / db
index 1502b31..1fb2796 100755 (executable)
--- a/plc.d/db
+++ b/plc.d/db
@@ -51,19 +51,53 @@ function migrate_db()
     done
 }
 
+function checkpoint_planetlab_db()
+{
+    dumpfile=$1
+    pg_dump -U $PLC_DB_USER $PLC_DB_NAME > $dumpfile
+    check
+}
+
+function restore_planetlab_db()
+{
+    dumpfile=$1
+    if [ -n "$dumpfile" ] ; then 
+       [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER $PLC_DB_NAME < $dumpfile
+       check
+    fi
+}
+
+# use a single date of this script invocation for the dump_*_db functions.
+DATE=$(date +"%Y-%m-%d-%H-%M-%S")
+
 # Dumps the database - optional argument to specify filename suffix
 function dump_planetlab_db()
 {
     if [ -n "$1" ] ; then suffix="-$1" ; else suffix="" ; fi
-    dump=/var/lib/pgsql/backups/$(date +"$PLC_DB_NAME.%Y-%m-%d-%H-%M-%S${suffix}.sql")
-    pg_dump -U $PLC_DB_USER $PLC_DB_NAME > $dump
+    dumpfile=/var/lib/pgsql/backups/$(date +"${PLC_DB_NAME}.${DATE}${suffix}.sql")
+    checkpoint_planetlab_db $dumpfile
+}
+
+function restore_drupal_db()
+{
+    dumpfile=$1
+    if [ -n "$dumpfile" ] ; then 
+       [ -f "$dumpfile" ] && psql -a -U $PLC_DB_USER drupal < $1
+       check
+    fi
+}
+
+function checkpoint_drupal_db()
+{
+    dumpfile=$1
+    pg_dump -U $PLC_DB_USER drupal > $dumpfile
     check
 }
 
 function dump_drupal_db()
 {
-    dump=/var/lib/pgsql/backups/$(date +"drupal.%Y-%m-%d-%H-%M-%S.sql")
-    pg_dump -U $PLC_DB_USER drupal > $dump
+    dumpfile=/var/lib/pgsql/backups/$(date +"drupal.${DATE}.sql")
+    checkpoint_drupal_db $dumpfile
     check
 }
 
@@ -74,10 +108,7 @@ function clean_dumps()
     check
 }
 
-if [ "$PLC_DB_ENABLED" != "1" ] ; then
-    exit 0
-fi
-
+[ $PLC_DB_ENABLED -ne 1 ] && exit 0
 case "$1" in
     start)
        MESSAGE=$"Bootstrapping the database"
@@ -94,9 +125,13 @@ case "$1" in
        psql -U $PLC_DB_USER -c "UPDATE persons SET email='$PLC_API_MAINTENANCE_USER' WHERE person_id=1" $PLC_DB_NAME
 
        # Update the Drupal site_name variable
+       # also turn off drupal native user registration
        psql -U $PLC_DB_USER drupal <<EOF
 DELETE FROM variable WHERE name = 'site_name';
 INSERT INTO variable (name, value) VALUES ('site_name', 's:${#PLC_NAME}:"$PLC_NAME";');
+DELETE FROM variable WHERE name = 'user_register';
+INSERT INTO variable (name, value) VALUES ('user_register', 's:1:"0";');
+DELETE FROM cache;
 EOF
 
        # Bootstrap the DB
@@ -123,6 +158,18 @@ EOF
        result "$MESSAGE"
        ;;
 
+    checkpoint)
+       MESSAGE=$"Checkpointing the databases"
+       checkpoint_planetlab_db $2
+       checkpoint_drupal_db $3
+       ;;
+
+    restore)
+       MESSAGE=$"Restoring the databases from checkpoint files"
+       restore_planetlab_db $2
+       restore_drupal_db $3
+       ;;
+
     clean-dump)
        MESSAGE=$"Cleaning old database dumps"
        dialog "$MESSAGE"
@@ -131,8 +178,14 @@ EOF
        result "$MESSAGE"
        ;;
 
+    stop)
+       MESSAGE="Ignoring request to stop myplc databases"
+       dialog "$MESSAGE"
+       result ""
+       ;;
+
     *)
-        echo "Usage: $0 [start|migrate|dump|clean-dump]"
+        echo "Usage: $0 [start|migrate|dump|checkpoint|restore|clean-dump|stop]"
        exit 1
        ;;
 esac