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 "It attempts to (re)create the planetlab5 database from planetlab4"
48 echo "You might wish to edit/review $NODEGROUPS_DEF to finetune your migration"
50 echo "Please refer to http://svn.planet-lab.org/wiki/Migration4to5"
51 echo "========================================"
52 echo -n "Are you sure you want to proceed y/[n] ? "
55 y|Y) echo See log in $LOG ;;
56 *) echo "Bye" ; exit 1 ;;
61 [ -f $MIGRATION_SED ] || { echo $MIGRATION_SED not found - exiting ; exit 1; }
62 [ -f $MIGRATION_SQL ] || { echo $MIGRATION_SQL not found - exiting ; exit 1; }
63 [ -f $SCHEMA_SQL ] || { echo $SCHEMA_SQL not found - exiting ; exit 1; }
64 [ -f $NODEGROUPS_DEF ] || { echo $NODEGROUPS_DEF not found - exiting ; exit 1; }
70 if [ -n "$DEBUG" ] ; then
71 echo -n "Type enter to run next step XXX $message XXX ... "
76 echo "==================================================" >> $LOG
87 # check that planetlab4 exists
88 if check_for_database planetlab4 ; then
89 echo "OK : FOUND db planetlab4"
91 echo "ERROR : planetlab4 NOT FOUND - bye"
95 # check if planetlab5 exists
96 if check_for_database planetlab5 ; then
97 rename=planetlab5_${DATE_}
98 echo -n "There is an existing DB named planetlab5, drop or rename into $rename d/[r] ? "
102 run "Dropping planetlab5" psql --user=postgres template1 -c "DROP DATABASE planetlab5" || true
105 if check_for_database $rename ; then
106 echo "$rename already exists - exiting"
109 run "Renaming planetlab5 into $rename" \
110 psql --user=postgres template1 -c "ALTER DATABASE planetlab5 RENAME TO $rename"
116 # again: now it should not exist
117 if check_for_database planetlab5 ; then
118 echo "ERROR : FOUND planetlab5 - should not happen - exiting"
121 echo "OK, we're clear, let's go"
126 if [ ! -f $FAKE ] ; then
127 run "Dumping planetlab4 in $DUMP" pg_dump --user=$PLC_DB_USER -f $DUMP planetlab4
130 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
132 echo Using fake input for tests $FAKE
134 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
139 run "Copying into $RESTORE" cp $DUMP $RESTORE
140 run "Renaming identifiers in $RESTORE" sed -f $MIGRATION_SED -i $RESTORE
142 run "Creating planetlab5 database" createdb --user=postgres --encoding=UNICODE --owner=$PLC_DB_USER planetlab5
143 run "Loading language plpgsql" createlang -U postgres plpgsql planetlab5 || true
144 run "Populating planetlab5 from $RESTORE" psql --user=postgres -f $RESTORE planetlab5
145 run "Parsing $NODEGROUPS_DEF" $PGM_NODEGROUPS $NODEGROUPS_DEF $NODEGROUPS_SQL
146 run "Loading $NODEGROUPS_SQL" psql --user=$PLC_DB_USER -f $NODEGROUPS_SQL planetlab5
147 run "Fine-tuning it with $MIGRATION_SQL" psql --user=$PLC_DB_USER -f $MIGRATION_SQL planetlab5
148 run "Extracting views definitions from $SCHEMA_SQL" $PGM_VIEWS $SCHEMA_SQL $VIEWS_SQL
149 run "Inserting views definitions in planetlab5" \
150 psql --user=$PLC_DB_USER -f $VIEWS_SQL planetlab5
153 function manage_link () {
157 echo "Managing link $dest"
164 result=${DIRNAME}/${DATE}-output.sql
165 run "Dumping result in $result" pg_dump --user=$PLC_DB_USER -f $result planetlab5
167 manage_link latest.log $LOG
168 manage_link latest-pl4.sql $DUMP
169 manage_link latest-pl5.sql $RESTORE
170 manage_link latest-views5.sql $VIEWS_SQL
171 manage_link latest-output.sql $result