step2 : basic functions for handling nodetags and nodegroups - still highly volatile
[plcapi.git] / migrations / migrate-v4-to-v5.sh
1 #!/bin/bash
2
3 COMMAND=$(basename $0)
4 BASENAME=$(basename $COMMAND .sh)
5 DIRNAME=$(dirname $0)
6
7 . /etc/planetlab/plc_config
8
9 PLC_DB_USER
10
11 # return 0 (yes) or 1 (no) whether the database exists
12 function check_for_database () {
13     dbname=$1; shift
14     psql --user=$PLC_DB_USER --quiet -c "SELECT subversion from plc_db_version LIMIT 1" $dbname 2> /dev/null
15     return $?
16 }
17
18 # when 'service plc start' gets run, the planetlab5 DB gets created 
19 # so this script will drop the planetlab5 DB and re-create it from scratch 
20 # with the contents of the planetlab4 DB that is epxected to exist
21 function main () {
22     
23     set -e
24     cd /usr/share/plc_api
25
26     # check that planetlab4 exists
27     if check_for_database planetlab4 ; then
28         echo OK : FOUND db planetlab4
29     else
30         echo ERROR :  planetlab4 NOT FOUND - exiting 
31         exit 1
32     fi
33
34     # dump planetlab4
35     DUMP4=planetlab4-$(date +%Y-%m-%d-%H-%M)
36     pg_dump --user=$PLC_DB_USER planetlab4 > $DUMP4.sql
37
38     # check if planetlab5 exists
39     if check_for_database planetlab5 ; then
40         echo 'WARNING: found an existing DB named planetlab5'
41         i=0
42         while true; do
43             i=$(($i+1))
44             bkname=$(printf planetlab5-%03d $i)
45             if check_for_database $bkname ; then
46                 echo "$bkname already exists - skipping"
47             else
48                 echo "Renaming planetab5 into $bkname"
49                 psql --user=$PLC_DB_USER -c "ALTER DATABASE planetlab5 RENAME TO $bkname"
50                 echo "Done"
51             fi
52         done
53     fi
54     if check_for_database planetlab5 ; then
55         echo ERROR : FOUND planetlab5 - exiting
56         exit 1
57     else
58         echo OK : db planetlab5 NOT FOUND 
59     fi
60
61     # create it
62     createdb --user=postgres --encoding=UNICODE --owner=$PLC_DB_USER planetlab5
63     # populate it
64     psql --user=$PLC_DB_USER planetlab5 < $DUMP4.sql
65
66     # run coarse-grain script
67     migration_script | psql --user=$PLC_DB_USER planetlab5 
68     
69 }
70
71
72 function migration_script () {
73
74     sql_script=$DIRNAME/${BASENAME}.sql
75     if [ -f $sql_script ] ; then
76         cat $sql_script
77     else
78         echo Cannot locate ${BASENAME}.sql 
79         echo exiting 
80         exit 1
81     fi
82 }