add migrate command to opencloud script
[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 "Evolving OpenCloud services..."
50     python /opt/planetstack/manage.py evolve --hint --execute --noinput
51 }
52 function migratedb {
53     echo "Migrating OpenCloud services..."
54     python /opt/planetstack/manage.py migrate
55 }
56 function stopserver {
57     echo "Stopping any running OpenCloud Service(s)"
58     pkill -f "python.*runserver"
59 }
60 function runserver {
61     PUBLIC_HOSTNAME=`/opt/planetstack/planetstack-config.py get server_hostname $HOSTNAME`
62     echo "Starting OpenCloud Service on $PUBLIC_HOSTNAME:8000"
63     python manage.py runserver  $PUBLIC_HOSTNAME:8000&
64 }
65
66 function dumpdata {
67     mkdir -p $BACKUP_DIR
68     FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
69     echo "Saving data to $FN"
70     python manage.py dumpdata core hpc syndicate_storage requestrouter -a --indent 4 > $FN
71     if [[ ! -f $FN ]]; then
72         echo "FAILED to create $FN"
73         exit
74     fi
75     SIZE=$(du -k "$FN" | cut -f 1)
76     if [[ $SIZE -lt 9 ]]; then
77         echo "Dumpdata was empty. Deleting and aborting"
78         rm $FN
79         exit
80     fi
81     rm -f $BACKUP_DIR/dumpdata-latest.json
82     ln -s $FN $BACKUP_DIR/dumpdata-latest.json
83 }
84
85 function genkeys {
86     mkdir -p public_keys
87     mkdir -p private_keys
88     echo "Generating keys"
89         keyczart create --location=private_keys --name="OpenCloud" --purpose=crypt --asymmetric=rsa
90         keyczart addkey --location=private_keys --status=primary --size=1024
91         keyczart pubkey --location=private_keys --destination=public_keys
92     if [[ ! -f public_keys/1 ]]; then
93         echo "FAILED to create keys"
94         exit
95     fi
96 }
97
98 COMMAND=$1
99
100 if [ "$COMMAND" = "initdb" ]; then
101     stopserver
102     ensure_postgres_running
103     createdb
104     syncdb
105 fi
106 if [ "$COMMAND" = "repairdb" ]; then
107     stopserver
108     ensure_postgres_running
109     dumpdata
110     # TODO: This is where we could run migration scripts to upgrade the
111     #   dumped data to the new models.
112     mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
113     cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
114     dropdb
115     createdb
116     syncdb
117 fi
118 if [ "$COMMAND" = "restoredb" ]; then
119     if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
120        echo There is no dumpdata to restore
121        exit
122     fi
123     stopserver
124     ensure_postgres_running
125     mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
126     cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
127     dropdb
128     createdb
129     syncdb
130 fi
131 if [ "$COMMAND" = "evolvedb" ]; then
132     stopserver
133     ensure_postgres_running
134     evolvedb
135 fi
136 if [ "$COMMAND" = "migratedb" ]; then
137     stopserver
138     ensure_postgres_running
139     migratedb
140 fi
141 if [ "$COMMAND" = "resetdb" ]; then
142     stopserver
143     dropdb
144     createdb
145     syncdb
146 fi
147 if [ "$COMMAND" = "syncdb" ]; then
148     stopserver
149     syncdb
150 fi
151 if [ "$COMMAND" = "runserver" ]; then
152     stopserver
153     runserver
154 fi
155 if [ "$COMMAND" = "stopserver" ]; then
156     stopserver
157 fi
158 if [ "$COMMAND" = "dumpdata" ]; then
159     dumpdata
160 fi
161 if [ "$COMMAND" = "genkeys" ]; then
162     genkeys
163 fi