4 BASENAME=$(basename $COMMAND .sh)
7 DIRNAME=$(cd ${DIRNAME}; /bin/pwd)
9 MIGRATION_SED=$DIRNAME/${BASENAME}.sed
10 MIGRATION_SQL=$DIRNAME/${BASENAME}.sql
12 UP=$(dirname $DIRNAME)
14 SCHEMA_SQL=$UPUP/planetlab5.sql
16 DATE=$(date +%Y-%m-%d-%H-%M)
17 DATE_=$(date +%Y_%m_%d_%H_%M)
18 LOG=${DIRNAME}/${DATE}.log
19 DUMP=${DIRNAME}/${DATE}-pl4.sql
20 RESTORE=${DIRNAME}/${DATE}-pl5.sql
21 FAKE=${DIRNAME}/input-pl4.sql
22 VIEWS_SQL=$DIRNAME/${DATE}-views5.sql
23 NODEGROUPS_DEF=$DIRNAME/site-nodegroups.def
24 NODEGROUPS_SQL=$DIRNAME/${DATE}-nodegroups.sql
26 PGM_VIEWS=$UP/extract-views.py
27 PGM_NODEGROUPS=$DIRNAME/parse-site-nodegroups.py
30 . /etc/planetlab/plc_config
32 # return 0 (yes) or 1 (no) whether the database exists
33 function check_for_database () {
35 psql --user=$PLC_DB_USER --quiet -c "SELECT datname from pg_database where datname= '$dbname' LIMIT 1" $dbname > /dev/null 2>&1
39 # when 'service plc start' gets run, the planetlab5 DB gets created
40 # so this script will drop the planetlab5 DB and re-create it from scratch
41 # with the contents of the planetlab4 DB that is epxected to exist
43 echo "========================================"
45 echo "This script is designed to ease the migration from myplc 4.2 to 5.0"
46 echo "You can run it before of after you install a 5.0 myplc"
48 echo "It will attempt to re-create the planetlab5 database from planetlab4"
49 echo "The planetlab5 database is renamed, not dropped, if it is found on the system"
51 echo "You might wish to edit/review $NODEGROUPS_DEF to finetune your migration"
52 echo "========================================"
53 echo -n "Are you sure you want to proceed y/[n] ? "
56 y|Y) echo See log in $LOG ;;
57 *) echo "Bye" ; exit 1 ;;
62 [ -f $MIGRATION_SED ] || { echo $MIGRATION_SED not found - exiting ; exit 1; }
63 [ -f $MIGRATION_SQL ] || { echo $MIGRATION_SQL not found - exiting ; exit 1; }
64 [ -f $SCHEMA_SQL ] || { echo $SCHEMA_SQL not found - exiting ; exit 1; }
65 [ -f $NODEGROUPS_DEF ] || { echo $NODEGROUPS_DEF not found - exiting ; exit 1; }
71 if [ -n "$DEBUG" ] ; then
72 echo -n "Type enter to run next step XXX $message XXX ... "
77 echo "==================================================" >> $LOG
88 # check that planetlab4 exists
89 if check_for_database planetlab4 ; then
90 echo "OK : FOUND db planetlab4"
92 echo "ERROR : planetlab4 NOT FOUND - bye"
96 # check if planetlab5 exists
97 if check_for_database planetlab5 ; then
98 rename=planetlab5_${DATE_}
99 echo -n "There is an existing DB named planetlab5, drop or rename into $rename d/[r] ? "
103 run "Dropping planetlab5" psql --user=postgres template1 -c "DROP DATABASE planetlab5" || true
106 if check_for_database $rename ; then
107 echo "$rename already exists - exiting"
110 run "Renaming planetlab5 into $rename" \
111 psql --user=postgres template1 -c "ALTER DATABASE planetlab5 RENAME TO $rename"
117 # again: now it should not exist
118 if check_for_database planetlab5 ; then
119 echo "ERROR : FOUND planetlab5 - should not happen - exiting"
122 echo "OK, we're clear, let's go"
127 if [ ! -f $FAKE ] ; then
128 run "Dumping planetlab4 in $DUMP" pg_dump --user=$PLC_DB_USER -f $DUMP planetlab4
131 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
133 echo Using fake input for tests $FAKE
135 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
140 run "Copying into $RESTORE" cp $DUMP $RESTORE
141 run "Renaming identifiers in $RESTORE" sed -f $MIGRATION_SED -i $RESTORE
143 run "Creating planetlab5 database" createdb --user=postgres --encoding=UNICODE --owner=$PLC_DB_USER planetlab5
144 run "Loading language plpgsql" createlang -U postgres plpgsql planetlab5 || true
145 run "Populating planetlab5 from $RESTORE" psql --user=postgres -f $RESTORE planetlab5
146 run "Parsing $NODEGROUPS_DEF" $PGM_NODEGROUPS $NODEGROUPS_DEF $NODEGROUPS_SQL
147 run "Loading $NODEGROUPS_SQL" psql --user=$PLC_DB_USER -f $NODEGROUPS_SQL planetlab5
148 run "Fine-tuning it with $MIGRATION_SQL" psql --user=$PLC_DB_USER -f $MIGRATION_SQL planetlab5
149 run "Extracting views definitions from $SCHEMA_SQL" $PGM_VIEWS $SCHEMA_SQL $VIEWS_SQL
150 run "Inserting views definitions in planetlab5" \
151 psql --user=$PLC_DB_USER -f $VIEWS_SQL planetlab5
154 function manage_link () {
158 echo "Managing link $dest"
165 result=${DIRNAME}/${DATE}-output.sql
166 run "Dumping result in $result" pg_dump --user=$PLC_DB_USER -f $result planetlab5
168 manage_link latest.log $LOG
169 manage_link latest-pl4.sql $DUMP
170 manage_link latest-pl5.sql $RESTORE
171 manage_link latest-views5.sql $VIEWS_SQL
172 manage_link latest-output.sql $result