Merge branch 'master' of ssh://git.planet-lab.org/git/plstackapi
[plstackapi.git] / planetstack / scripts / opencloud
1 #!/bin/sh
2
3 if [ -z "$1" ]; then
4     echo usage: $0 "[initdb | createdb | dropdb | syncdb | runserver | resetdb | dumpdata]"
5     exit
6 fi
7
8 BACKUP_DIR=/opt/planetstack_backups
9
10 cd /opt/planetstack
11
12 function ensure_postgres_running {
13     # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work
14     # right on Vicci, so let's try to detect it by seeing if the port is
15     # being listened on
16
17     netstat -nl | grep -i ":5432 "
18     if [[ $? == 0 ]]; then
19         echo "Postgres is already running"
20         return
21     fi
22
23     /sbin/service postgresql initdb
24     /sbin/service postgresql start
25     /sbin/chkconfig postgresql on
26
27     netstat -nl | grep -i ":5432 "
28     if [[ $? != 0 ]]; then
29         # it's still not running
30         echo "Trying fallback mechanism to start Postgres"
31         sudo -u postgres initdb -D /var/lib/pgsql/data/
32         sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start
33     fi
34
35 }
36 function createdb {
37     echo "Creating OpenCloud database..."
38     sudo -u postgres createdb planetstack
39 }
40 function dropdb {
41     echo "Dropping OpenCloud database..."
42     sudo -u postgres dropdb planetstack
43 }
44 function syncdb {
45     echo "Syncing OpenCloud services..."
46     python /opt/planetstack/manage.py syncdb --noinput
47 }
48 function evolvedb {
49     echo "Syncing OpenCloud services..."
50     python /opt/planetstack/manage.py evolve --hint --execute --noinput
51 }
52 function stopserver {
53     echo "Stopping any running OpenCloud Service(s)"
54     pkill -f "python.*runserver"
55 }
56 function runserver {
57     PUBLIC_HOSTNAME=`/opt/planetstack/planetstack-config.py get server_hostname $HOSTNAME`
58     echo "Starting OpenCloud Service on $PUBLIC_HOSTNAME:8000"
59     python manage.py runserver  $PUBLIC_HOSTNAME:8000&
60 }
61
62 function dumpdata {
63     mkdir -p $BACKUP_DIR
64     FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
65     echo "Saving data to $FN"
66     python manage.py dumpdata core hpc syndicate requestrouter --indent 4 > $FN
67     if [[ ! -f $FN ]]; then
68         echo "FAILED to create $FN"
69         exit
70     fi
71     SIZE=$(du -k "$FN" | cut -f 1)
72     if [[ $SIZE -lt 9 ]]; then
73         echo "Dumpdata was empty. Deleting and aborting"
74         rm $FN
75         exit
76     fi
77     rm -f $BACKUP_DIR/dumpdata-latest.json
78     ln -s $FN $BACKUP_DIR/dumpdata-latest.json
79 }
80
81 COMMAND=$1
82
83 if [ "$COMMAND" = "initdb" ]; then
84     stopserver
85     ensure_postgres_running
86     createdb
87     syncdb
88 fi
89 if [ "$COMMAND" = "repairdb" ]; then
90     stopserver
91     ensure_postgres_running
92     dumpdata
93     # TODO: This is where we could run migration scripts to upgrade the
94     #   dumped data to the new models.
95     mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
96     cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
97     dropdb
98     createdb
99     syncdb
100 fi
101 if [ "$COMMAND" = "restoredb" ]; then
102     if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
103        echo There is no dumpdata to restore
104        exit
105     fi
106     stopserver
107     ensure_postgres_running
108     mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
109     cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
110     dropdb
111     createdb
112     syncdb
113 fi
114 if [ "$COMMAND" = "evolvedb" ]; then
115     stopserver
116     ensure_postgres_running
117     evolvedb
118 fi
119 if [ "$COMMAND" = "resetdb" ]; then
120     stopserver
121     dropdb
122     createdb
123     syncdb
124 fi
125 if [ "$COMMAND" = "syncdb" ]; then
126     stopserver
127     syncdb
128 fi
129 if [ "$COMMAND" = "runserver" ]; then
130     stopserver
131     runserver
132 fi
133 if [ "$COMMAND" = "stopserver" ]; then
134     stopserver
135 fi
136 if [ "$COMMAND" = "dumpdata" ]; then
137     dumpdata
138 fi