blob: d731629d741beadc38974653167938502a6868f0 [file] [log] [blame]
Andy Baviere4b346e2015-02-06 16:39:06 -05001#!/bin/bash
Siobhan Tully44fd4cc2014-02-23 00:07:12 -05002
3if [ -z "$1" ]; then
Scott Bakerf4db3812014-05-09 16:42:13 -07004 echo usage: $0 "[initdb | createdb | dropdb | syncdb | runserver | resetdb | dumpdata]"
Siobhan Tully44fd4cc2014-02-23 00:07:12 -05005 exit
6fi
7
Scott Baker06116da2015-02-04 21:50:08 -08008XOS_DIR=/opt/xos
9BACKUP_DIR=/opt/xos_backups
Scott Bakerd2ebcd42015-02-19 21:56:58 -080010DBNAME=xos
Scott Bakerb4785022014-05-15 13:22:28 -070011
Scott Baker02451372014-09-16 09:46:35 -070012DJANGO_17=`python -c "import django; from distutils.version import StrictVersion; print int(StrictVersion(django.get_version()) >= StrictVersion('1.7'))"`
13
Scott Bakerdc74f7d2015-02-04 15:04:26 -080014cd $XOS_DIR
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050015
Scott Baker5bec7592015-02-19 11:34:41 -080016function is_ubuntu {
17 if ! which lsb_release &> /dev/null; then
18 # lsb_release is not installed
19 return 1
20 fi
21 if lsb_release -i | grep -i ubuntu &> /dev/null; then
22 return 0
23 fi
24 return 2
25}
26
Scott Bakerb4785022014-05-15 13:22:28 -070027function ensure_postgres_running {
28 # "sudo -u postgres pg_ctl -D /var/lib/postgres/data status" doesn't work
29 # right on Vicci, so let's try to detect it by seeing if the port is
30 # being listened on
31
Scott Baker5bec7592015-02-19 11:34:41 -080032 netstat -nl | grep -i ":5432 " > /dev/null
Scott Bakerb4785022014-05-15 13:22:28 -070033 if [[ $? == 0 ]]; then
34 echo "Postgres is already running"
35 return
36 fi
37
Scott Baker5bec7592015-02-19 11:34:41 -080038 # note that initdb isn't needed in Ubuntu distributions, and calling it
39 # will throw spurious error messages
40 if ! is_ubuntu; then
41 service postgresql initdb
42 fi
Andy Baviere4b346e2015-02-06 16:39:06 -050043 service postgresql start
Scott Bakerb4785022014-05-15 13:22:28 -070044
Scott Baker5bec7592015-02-19 11:34:41 -080045 netstat -nl | grep -i ":5432 " > /dev/null
Scott Bakerb4785022014-05-15 13:22:28 -070046 if [[ $? != 0 ]]; then
Scott Baker5bec7592015-02-19 11:34:41 -080047 # it's still not running...
48 # this is intended for Vicci where some D-Bus issue is
49 # preventing systemctl from working properly.
Scott Bakerb4785022014-05-15 13:22:28 -070050 echo "Trying fallback mechanism to start Postgres"
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050051 sudo -u postgres initdb -D /var/lib/pgsql/data/
52 sudo -u postgres pg_ctl -D /var/lib/pgsql/data -l logfile start
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050053 fi
Scott Bakerb4785022014-05-15 13:22:28 -070054
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050055}
Scott Baker5bec7592015-02-19 11:34:41 -080056
Scott Bakerf8435ca2015-07-20 10:57:08 -070057function wait_postgres {
58 sudo -u postgres psql -c '\q'
59 while [[ "$?" != "0" ]]; do
60 echo Waiting for postgres to start
61 sleep 1
62 sudo -u postgres psql -c '\q'
Jeremy Moweryd3e44952015-12-04 14:07:11 -070063 done
Scott Bakerf8435ca2015-07-20 10:57:08 -070064}
65
Scott Baker5bec7592015-02-19 11:34:41 -080066function db_exists {
Jeremy Moweryd3e44952015-12-04 14:07:11 -070067 sudo -u postgres psql $DBNAME -c '\q' 2>/dev/null
Scott Baker5bec7592015-02-19 11:34:41 -080068 return $?
Jeremy Moweryd3e44952015-12-04 14:07:11 -070069}
Scott Baker5bec7592015-02-19 11:34:41 -080070
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050071function createdb {
Scott Bakerf8435ca2015-07-20 10:57:08 -070072 wait_postgres
Scott Bakerdc74f7d2015-02-04 15:04:26 -080073 echo "Creating XOS database..."
74 sudo -u postgres createdb $DBNAME
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050075}
76function dropdb {
Scott Bakerdc74f7d2015-02-04 15:04:26 -080077 echo "Dropping XOS database..."
78 sudo -u postgres dropdb $DBNAME
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050079}
80function syncdb {
Scott Bakerdc74f7d2015-02-04 15:04:26 -080081 echo "Syncing XOS services..."
Scott Bakera8b263b2015-02-04 22:47:45 -080082 python $XOS_DIR/manage.py syncdb --noinput
Scott Baker02451372014-09-16 09:46:35 -070083 if [[ $DJANGO_17 ]]; then
84 echo "Loading initial data from fixture..."
Matteo Scandolo4c891052016-01-11 17:03:52 -080085 python $XOS_DIR/manage.py --noobserver --nomodelpolicy loaddata $XOS_DIR/core/fixtures/core_initial_data.json
Scott Baker02451372014-09-16 09:46:35 -070086 fi
Siobhan Tully44fd4cc2014-02-23 00:07:12 -050087}
Scott Baker25b70fd2014-05-15 14:11:58 -070088function evolvedb {
Scott Bakerdc74f7d2015-02-04 15:04:26 -080089 echo "Evolving XOS services..."
Scott Bakera8b263b2015-02-04 22:47:45 -080090 python $XOS_DIR/manage.py evolve --hint --execute --noinput
Scott Baker25b70fd2014-05-15 14:11:58 -070091}
Scott Baker6ecdc422014-09-12 15:10:01 -070092function migratedb {
Scott Bakerdc74f7d2015-02-04 15:04:26 -080093 echo "Migrating XOS services..."
Scott Bakera8b263b2015-02-04 22:47:45 -080094 python $XOS_DIR/manage.py migrate
Scott Baker6ecdc422014-09-12 15:10:01 -070095}
Scott Bakerb4785022014-05-15 13:22:28 -070096function stopserver {
Scott Bakerdc74f7d2015-02-04 15:04:26 -080097 echo "Stopping any running XOS Service(s)"
Scott Bakerb4785022014-05-15 13:22:28 -070098 pkill -f "python.*runserver"
99}
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500100function runserver {
Andy Baviere4b346e2015-02-06 16:39:06 -0500101 ensure_postgres_running
Scott Baker7914dab2016-01-13 16:18:38 -0800102 PUBLIC_HOSTNAME="0.0.0.0"
Scott Bakerdc74f7d2015-02-04 15:04:26 -0800103 echo "Starting XOS Service on $PUBLIC_HOSTNAME:8000"
Scott Bakere712c792015-02-06 16:26:04 -0800104 python manage.py runserver $PUBLIC_HOSTNAME:8000 --insecure&
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500105}
106
Scott Bakerf4db3812014-05-09 16:42:13 -0700107function dumpdata {
Scott Bakerb4785022014-05-15 13:22:28 -0700108 mkdir -p $BACKUP_DIR
109 FN="$BACKUP_DIR/dumpdata-`date +%Y-%m-%d_%H:%M:%S`.json"
110 echo "Saving data to $FN"
Scott Bakera2e881c2014-08-15 16:52:55 -0700111 python manage.py dumpdata core hpc syndicate_storage requestrouter -a --indent 4 > $FN
Scott Bakerb4785022014-05-15 13:22:28 -0700112 if [[ ! -f $FN ]]; then
113 echo "FAILED to create $FN"
114 exit
115 fi
Scott Baker25b70fd2014-05-15 14:11:58 -0700116 SIZE=$(du -k "$FN" | cut -f 1)
117 if [[ $SIZE -lt 9 ]]; then
118 echo "Dumpdata was empty. Deleting and aborting"
119 rm $FN
120 exit
121 fi
Scott Bakerb4785022014-05-15 13:22:28 -0700122 rm -f $BACKUP_DIR/dumpdata-latest.json
123 ln -s $FN $BACKUP_DIR/dumpdata-latest.json
Scott Bakerf4db3812014-05-09 16:42:13 -0700124}
125
Sapan Bhatia0e8769f2014-09-08 10:53:53 -0400126function genkeys {
127 mkdir -p public_keys
128 mkdir -p private_keys
129 echo "Generating keys"
130 keyczart create --location=private_keys --name="OpenCloud" --purpose=crypt --asymmetric=rsa
Zack Williamsed008002016-04-21 15:48:28 -0700131 keyczart addkey --location=private_keys --status=primary --size=2048
Sapan Bhatia0e8769f2014-09-08 10:53:53 -0400132 keyczart pubkey --location=private_keys --destination=public_keys
133 if [[ ! -f public_keys/1 ]]; then
134 echo "FAILED to create keys"
135 exit
136 fi
137}
138
Tony Mackf635bfe2015-10-31 14:18:11 +0000139function makemigrations {
Tony Mack4e372892015-11-01 13:50:12 +0000140 rm -rf /opt/xos/*/migrations /opt/xos/services/*/migrations
Scott Baker4d8a6382015-02-18 16:42:14 -0800141 python ./manage.py makemigrations core
142 python ./manage.py makemigrations hpc
143 python ./manage.py makemigrations requestrouter
144 python ./manage.py makemigrations syndicate_storage
Scott Baker9ff69602015-05-06 12:04:09 -0700145 python ./manage.py makemigrations cord
Scott Baker92a05d72015-09-10 09:02:01 -0700146 python ./manage.py makemigrations ceilometer
Zack Williams787b7e12016-04-27 15:30:53 -0700147 python ./manage.py makemigrations exampleservice
Scott Baker7d6a9fa2015-10-16 16:54:07 -0700148 python ./manage.py makemigrations onos
Jeremy Moweryc47df3d2016-04-21 12:57:44 -0700149 python ./manage.py makemigrations openvpn
Scott Baker375e5ca2016-03-06 17:14:27 -0800150 python ./manage.py makemigrations vtr
Scott Baker7785c132016-04-14 16:05:13 -0700151 python ./manage.py makemigrations vrouter
Scott Baker90378fa2016-04-20 16:58:44 -0700152 python ./manage.py makemigrations vtn
Scott Baker43fae6a2016-04-27 22:53:43 -0700153 python ./manage.py makemigrations fabric
Scott Baker4d8a6382015-02-18 16:42:14 -0800154 #python ./manage.py makemigrations servcomp
155}
156
Tony Mackf635bfe2015-10-31 14:18:11 +0000157function remigrate {
158 if db_exists; then
159 dropdb
160 fi
161 makemigrations
162}
163
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500164COMMAND=$1
165
166if [ "$COMMAND" = "initdb" ]; then
Scott Bakerb4785022014-05-15 13:22:28 -0700167 stopserver
168 ensure_postgres_running
169 createdb
170 syncdb
Scott Bakerb4785022014-05-15 13:22:28 -0700171fi
Scott Baker25b70fd2014-05-15 14:11:58 -0700172if [ "$COMMAND" = "repairdb" ]; then
Scott Bakerb4785022014-05-15 13:22:28 -0700173 stopserver
174 ensure_postgres_running
175 dumpdata
Scott Baker25b70fd2014-05-15 14:11:58 -0700176 # TODO: This is where we could run migration scripts to upgrade the
Scott Bakerb4785022014-05-15 13:22:28 -0700177 # dumped data to the new models.
Matteo Scandolo4c891052016-01-11 17:03:52 -0800178 mv $XOS_DIR/core/fixtures/core_initial_data.json $XOS_DIR/core/fixtures/core_initial_data.json-old
179 cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/core_initial_data.json
Scott Bakerb4785022014-05-15 13:22:28 -0700180 dropdb
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500181 createdb
182 syncdb
Scott Baker25b70fd2014-05-15 14:11:58 -0700183fi
184if [ "$COMMAND" = "restoredb" ]; then
185 if [[ ! -f $BACKUP_DIR/dumpdata-latest.json ]]; then
186 echo There is no dumpdata to restore
187 exit
188 fi
189 stopserver
190 ensure_postgres_running
Matteo Scandolo4c891052016-01-11 17:03:52 -0800191 mv $XOS_DIR/core/fixtures/core_initial_data.json $XOS_DIR/core/fixtures/core_initial_data.json-old
192 cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/core_initial_data.json
Scott Baker25b70fd2014-05-15 14:11:58 -0700193 dropdb
194 createdb
195 syncdb
196fi
Scott Baker4bb7cbc2014-09-17 22:19:54 -0700197if [ "$COMMAND" = "evolvedb" -o "$COMMAND" = "migratedb" ]; then
Scott Baker25b70fd2014-05-15 14:11:58 -0700198 stopserver
199 ensure_postgres_running
Scott Baker4bb7cbc2014-09-17 22:19:54 -0700200 if [[ $DJANGO_17 ]]; then
201 migratedb
202 else
203 evolvedb
204 fi
Scott Baker6ecdc422014-09-12 15:10:01 -0700205fi
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500206if [ "$COMMAND" = "resetdb" ]; then
Scott Bakerb4785022014-05-15 13:22:28 -0700207 stopserver
S.Çağlar Onur995e07d2015-02-24 15:34:39 -0500208 ensure_postgres_running
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500209 dropdb
210 createdb
211 syncdb
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500212fi
213if [ "$COMMAND" = "syncdb" ]; then
Scott Bakerb4785022014-05-15 13:22:28 -0700214 stopserver
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500215 syncdb
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500216fi
217if [ "$COMMAND" = "runserver" ]; then
Scott Bakerb4785022014-05-15 13:22:28 -0700218 stopserver
Siobhan Tully44fd4cc2014-02-23 00:07:12 -0500219 runserver
220fi
Scott Bakerb4785022014-05-15 13:22:28 -0700221if [ "$COMMAND" = "stopserver" ]; then
222 stopserver
223fi
Scott Bakerf4db3812014-05-09 16:42:13 -0700224if [ "$COMMAND" = "dumpdata" ]; then
225 dumpdata
226fi
Sapan Bhatia0e8769f2014-09-08 10:53:53 -0400227if [ "$COMMAND" = "genkeys" ]; then
228 genkeys
229fi
Scott Bakerc57ddcc2015-02-16 23:34:48 -0800230if [ "$COMMAND" = "generateapi" ]; then
Scott Bakercd4a0c22015-02-16 23:47:11 -0800231 python apigen/modelgen apigen/api.template.py > xos/xosapi.py
Scott Baker4d8a6382015-02-18 16:42:14 -0800232fi
233if [ "$COMMAND" = "remigrate" ]; then
234 ensure_postgres_running
235 remigrate
236 createdb
237 syncdb
S.Çağlar Onur995e07d2015-02-24 15:34:39 -0500238fi
Tony Mackf635bfe2015-10-31 14:18:11 +0000239if [ "$COMMAND" = "makemigrations" ]; then
240 makemigrations
241 syncdb
242fi