041f3f874d791ad4464dbea4c1b11c85564124fb
[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_storage requestrouter -a --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 function genkeys {
82     mkdir -p public_keys
83     mkdir -p private_keys
84     echo "Generating keys"
85         keyczart create --location=private_keys --name="OpenCloud" --purpose=crypt --asymmetric=rsa
86         keyczart addkey --location=private_keys --status=primary --size=1024
87         keyczart pubkey --location=private_keys --destination=public_keys
88     if [[ ! -f public_keys/1 ]]; then
89         echo "FAILED to create keys"
90         exit
91     fi
92 }
93
94 COMMAND=$1
95
96 if [ "$COMMAND" = "initdb" ]; then
97     stopserver
98     ensure_postgres_running
99     createdb
100     syncdb
101 fi
102 if [ "$COMMAND" = "repairdb" ]; then
103     stopserver
104     ensure_postgres_running
105     dumpdata
106     # TODO: This is where we could run migration scripts to upgrade the
107     #   dumped data to the new models.
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" = "restoredb" ]; then
115     if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
116        echo There is no dumpdata to restore
117        exit
118     fi
119     stopserver
120     ensure_postgres_running
121     mv /opt/planetstack/core/fixtures/initial_data.json /opt/planetstack/core/fixtures/initial_data.json-old
122     cp $BACKUP_DIR/dumpdata-latest.json /opt/planetstack/core/fixtures/initial_data.json
123     dropdb
124     createdb
125     syncdb
126 fi
127 if [ "$COMMAND" = "evolvedb" ]; then
128     stopserver
129     ensure_postgres_running
130     evolvedb
131 fi
132 if [ "$COMMAND" = "resetdb" ]; then
133     stopserver
134     dropdb
135     createdb
136     syncdb
137 fi
138 if [ "$COMMAND" = "syncdb" ]; then
139     stopserver
140     syncdb
141 fi
142 if [ "$COMMAND" = "runserver" ]; then
143     stopserver
144     runserver
145 fi
146 if [ "$COMMAND" = "stopserver" ]; then
147     stopserver
148 fi
149 if [ "$COMMAND" = "dumpdata" ]; then
150     dumpdata
151 fi
152 if [ "$COMMAND" = "genkeys" ]; then
153     genkeys
154 fi