blob: e8415e421e9041917abdb8021a53a1450f78d43e [file] [log] [blame]
tiernof7aa8c42016-09-06 16:43:04 +02001#!/bin/bash
2
3##
4# Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
tierno9a61c6b2016-09-08 10:57:02 +02005# This file is part of openvim
tiernof7aa8c42016-09-06 16:43:04 +02006# All Rights Reserved.
7#
8# Licensed under the Apache License, Version 2.0 (the "License"); you may
9# not use this file except in compliance with the License. You may obtain
10# a copy of the License at
11#
12# http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing, software
15# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17# License for the specific language governing permissions and limitations
18# under the License.
19#
20# For those usages not covered by the Apache License, Version 2.0 please
21# contact with: nfvlabs@tid.es
22##
23
24#
25#Upgrade/Downgrade openvim database preserving the content
26#
27
28DBUSER="vim"
29DBPASS=""
tierno95a9e832017-04-27 18:49:37 +020030DEFAULT_DBPASS="vimpw"
31DBHOST=""
tiernof7aa8c42016-09-06 16:43:04 +020032DBPORT="3306"
33DBNAME="vim_db"
tierno95a9e832017-04-27 18:49:37 +020034QUIET_MODE=""
35#TODO update it with the last database version
garciadeblas259459f2017-11-14 16:27:31 +010036LAST_DB_VERSION=22
tierno95a9e832017-04-27 18:49:37 +020037
tiernof7aa8c42016-09-06 16:43:04 +020038# Detect paths
39MYSQL=$(which mysql)
40AWK=$(which awk)
41GREP=$(which grep)
tiernof7aa8c42016-09-06 16:43:04 +020042
43function usage(){
tierno95a9e832017-04-27 18:49:37 +020044 echo -e "Usage: $0 OPTIONS [version]"
45 echo -e " Upgrades/Downgrades openvim database preserving the content."\
46 "If [version] is not provided, it is upgraded to the last version"
tiernof7aa8c42016-09-06 16:43:04 +020047 echo -e " OPTIONS"
48 echo -e " -u USER database user. '$DBUSER' by default. Prompts if DB access fails"
tierno95a9e832017-04-27 18:49:37 +020049 echo -e " -p PASS database password. If missing it tries without and '$DEFAULT_DBPASS' password before prompting"
tiernof7aa8c42016-09-06 16:43:04 +020050 echo -e " -P PORT database port. '$DBPORT' by default"
tierno95a9e832017-04-27 18:49:37 +020051 echo -e " -h HOST database host. 'localhost' by default"
tiernof7aa8c42016-09-06 16:43:04 +020052 echo -e " -d NAME database name. '$DBNAME' by default. Prompts if DB access fails"
tierno95a9e832017-04-27 18:49:37 +020053 echo -e " -q --quiet: Do not prompt for credentials and exit if cannot access to database"
tiernof7aa8c42016-09-06 16:43:04 +020054 echo -e " --help shows this help"
55}
56
tierno95a9e832017-04-27 18:49:37 +020057while getopts ":u:p:P:h:d:q-:" o; do
tiernof7aa8c42016-09-06 16:43:04 +020058 case "${o}" in
59 u)
60 DBUSER="$OPTARG"
61 ;;
62 p)
63 DBPASS="$OPTARG"
64 ;;
65 P)
66 DBPORT="$OPTARG"
67 ;;
68 d)
69 DBNAME="$OPTARG"
70 ;;
71 h)
72 DBHOST="$OPTARG"
73 ;;
tierno95a9e832017-04-27 18:49:37 +020074 q)
75 export QUIET_MODE=yes
76 ;;
tiernof7aa8c42016-09-06 16:43:04 +020077 -)
78 [ "${OPTARG}" == "help" ] && usage && exit 0
tierno95a9e832017-04-27 18:49:37 +020079 [ "${OPTARG}" == "quiet" ] && export QUIET_MODE=yes && continue
80 echo "Invalid option: '--$OPTARG'. Type --help for more information" >&2
tiernof7aa8c42016-09-06 16:43:04 +020081 exit 1
tierno95a9e832017-04-27 18:49:37 +020082 ;;
tiernof7aa8c42016-09-06 16:43:04 +020083 \?)
tierno95a9e832017-04-27 18:49:37 +020084 echo "Invalid option: '-$OPTARG'. Type --help for more information" >&2
tiernof7aa8c42016-09-06 16:43:04 +020085 exit 1
86 ;;
87 :)
tierno95a9e832017-04-27 18:49:37 +020088 echo "Option '-$OPTARG' requires an argument. Type --help for more information" >&2
tiernof7aa8c42016-09-06 16:43:04 +020089 exit 1
90 ;;
91 *)
92 usage >&2
tierno95a9e832017-04-27 18:49:37 +020093 exit 1
tiernof7aa8c42016-09-06 16:43:04 +020094 ;;
95 esac
96done
97shift $((OPTIND-1))
98
tierno95a9e832017-04-27 18:49:37 +020099DB_VERSION=$1
tiernof7aa8c42016-09-06 16:43:04 +0200100
tierno95a9e832017-04-27 18:49:37 +0200101if [ -n "$DB_VERSION" ] ; then
102 # check it is a number and an allowed one
103 [ "$DB_VERSION" -eq "$DB_VERSION" ] 2>/dev/null ||
104 ! echo "parameter 'version' requires a integer value" >&2 || exit 1
105 if [ "$DB_VERSION" -lt 0 ] || [ "$DB_VERSION" -gt "$LAST_DB_VERSION" ] ; then
106 echo "parameter 'version' requires a valid database version between '0' and '$LAST_DB_VERSION'"\
107 "If you need an upper version, get a newer version of this script '$0'" >&2
108 exit 1
109 fi
110else
111 DB_VERSION="$LAST_DB_VERSION"
tiernof7aa8c42016-09-06 16:43:04 +0200112fi
tiernof7aa8c42016-09-06 16:43:04 +0200113
tierno95a9e832017-04-27 18:49:37 +0200114# Creating temporary file
115TEMPFILE="$(mktemp -q --tmpdir "migratevimdb.XXXXXX")"
tierno115b64a2016-10-24 16:57:23 +0000116trap 'rm -f "$TEMPFILE"' EXIT
117chmod 0600 "$TEMPFILE"
tierno115b64a2016-10-24 16:57:23 +0000118DEF_EXTRA_FILE_PARAM="--defaults-extra-file=$TEMPFILE"
tierno95a9e832017-04-27 18:49:37 +0200119echo -e "[client]\n user='${DBUSER}'\n password='$DBPASS'\n host='$DBHOST'\n port='$DBPORT'" > "$TEMPFILE"
tierno115b64a2016-10-24 16:57:23 +0000120
tierno95a9e832017-04-27 18:49:37 +0200121# Check and ask for database user password
122FIRST_TRY="yes"
123while ! DB_ERROR=`mysql "$DEF_EXTRA_FILE_PARAM" $DBNAME -e "quit" 2>&1 >/dev/null`
tiernof7aa8c42016-09-06 16:43:04 +0200124do
tierno95a9e832017-04-27 18:49:37 +0200125 # if password is not provided, try silently with $DEFAULT_DBPASS before exit or prompt for credentials
126 [[ -n "$FIRST_TRY" ]] && [[ -z "$DBPASS" ]] && DBPASS="$DEFAULT_DBPASS" &&
127 echo -e "[client]\n user='${DBUSER}'\n password='$DBPASS'\n host='$DBHOST'\n port='$DBPORT'" > "$TEMPFILE" &&
128 continue
129 echo "$DB_ERROR"
130 [[ -n "$QUIET_MODE" ]] && echo -e "Invalid database credentials!!!" >&2 && exit 1
131 echo -e "Provide database name and credentials (Ctrl+c to abort):"
132 read -e -p " mysql database name($DBNAME): " KK
133 [ -n "$KK" ] && DBNAME="$KK"
134 read -e -p " mysql user($DBUSER): " KK
135 [ -n "$KK" ] && DBUSER="$KK"
136 read -e -s -p " mysql password: " DBPASS
137 echo -e "[client]\n user='${DBUSER}'\n password='$DBPASS'\n host='$DBHOST'\n port='$DBPORT'" > "$TEMPFILE"
138 FIRST_TRY=""
139 echo
tiernof7aa8c42016-09-06 16:43:04 +0200140done
141
tierno95a9e832017-04-27 18:49:37 +0200142DBCMD="mysql $DEF_EXTRA_FILE_PARAM $DBNAME"
tiernof7aa8c42016-09-06 16:43:04 +0200143#echo DBCMD $DBCMD
144
145#GET DATABASE VERSION
tierno95a9e832017-04-27 18:49:37 +0200146# check that the database seems a openvim database
tiernof7aa8c42016-09-06 16:43:04 +0200147if ! echo -e "show create table instances;\nshow create table numas" | $DBCMD >/dev/null 2>&1
148then
149 echo " database $DBNAME does not seem to be an openvim database" >&2
tierno1b20f662017-11-16 16:37:58 +0100150 exit 1;
tiernof7aa8c42016-09-06 16:43:04 +0200151fi
152
153if ! echo 'show create table schema_version;' | $DBCMD >/dev/null 2>&1
154then
155 DATABASE_VER="0.0"
156 DATABASE_VER_NUM=0
tierno95a9e832017-04-27 18:49:37 +0200157else
tierno1b20f662017-11-16 16:37:58 +0100158 DATABASE_VER_NUM=`echo "select max(version_int) from schema_version;" | $DBCMD | tail -n+2`
tiernof7aa8c42016-09-06 16:43:04 +0200159 DATABASE_VER=`echo "select version from schema_version where version_int='$DATABASE_VER_NUM';" | $DBCMD | tail -n+2`
tierno95a9e832017-04-27 18:49:37 +0200160 [ "$DATABASE_VER_NUM" -lt 0 -o "$DATABASE_VER_NUM" -gt 100 ] &&
tierno1b20f662017-11-16 16:37:58 +0100161 echo " Error can not get database version ($DATABASE_VER?)" >&2 && exit 1
tiernof7aa8c42016-09-06 16:43:04 +0200162 #echo "_${DATABASE_VER_NUM}_${DATABASE_VER}"
163fi
164
tierno95a9e832017-04-27 18:49:37 +0200165[ "$DATABASE_VER_NUM" -gt "$LAST_DB_VERSION" ] &&
166 echo "Database has been upgraded with a newer version of this script. Use this version to downgrade" >&2 &&
167 exit 1
tiernof7aa8c42016-09-06 16:43:04 +0200168
169#GET DATABASE TARGET VERSION
tierno95a9e832017-04-27 18:49:37 +0200170#DB_VERSION=0
171#[ $OPENVIM_VER_NUM -gt 1091 ] && DATABASE_TARGET_VER_NUM=1 #>0.1.91 => 1
172#[ $OPENVIM_VER_NUM -ge 2003 ] && DATABASE_TARGET_VER_NUM=2 #0.2.03 => 2
173#[ $OPENVIM_VER_NUM -ge 2005 ] && DATABASE_TARGET_VER_NUM=3 #0.2.5 => 3
174#[ $OPENVIM_VER_NUM -ge 3001 ] && DATABASE_TARGET_VER_NUM=4 #0.3.1 => 4
175#[ $OPENVIM_VER_NUM -ge 4001 ] && DATABASE_TARGET_VER_NUM=5 #0.4.1 => 5
176#[ $OPENVIM_VER_NUM -ge 4002 ] && DATABASE_TARGET_VER_NUM=6 #0.4.2 => 6
177#[ $OPENVIM_VER_NUM -ge 4005 ] && DATABASE_TARGET_VER_NUM=7 #0.4.5 => 7
178#[ $OPENVIM_VER_NUM -ge 4010 ] && DATABASE_TARGET_VER_NUM=8 #0.4.10 => 8
179#[ $OPENVIM_VER_NUM -ge 5001 ] && DATABASE_TARGET_VER_NUM=9 #0.5.1 => 9
180#[ $OPENVIM_VER_NUM -ge 5002 ] && DATABASE_TARGET_VER_NUM=10 #0.5.2 => 10
181#[ $OPENVIM_VER_NUM -ge 5004 ] && DATABASE_TARGET_VER_NUM=11 #0.5.4 => 11
182#[ $OPENVIM_VER_NUM -ge 5005 ] && DATABASE_TARGET_VER_NUM=12 #0.5.5 => 12
183#[ $OPENVIM_VER_NUM -ge 5006 ] && DATABASE_TARGET_VER_NUM=13 #0.5.6 => 13
184#[ $OPENVIM_VER_NUM -ge 5007 ] && DATABASE_TARGET_VER_NUM=14 #0.5.7 => 14
185#[ $OPENVIM_VER_NUM -ge 5008 ] && DATABASE_TARGET_VER_NUM=15 #0.5.8 => 15
186#[ $OPENVIM_VER_NUM -ge 5009 ] && DATABASE_TARGET_VER_NUM=16 #0.5.9 => 16
187#[ $OPENVIM_VER_NUM -ge 5010 ] && DATABASE_TARGET_VER_NUM=17 #0.5.10 => 17
tiernoa290d8f2017-05-03 17:42:52 +0200188#[ $OPENVIM_VER_NUM -ge 5013 ] && DATABASE_TARGET_VER_NUM=18 #0.5.13 => 18
tiernoa6933042017-05-24 16:54:33 +0200189#[ $OPENVIM_VER_NUM -ge 5015 ] && DATABASE_TARGET_VER_NUM=19 #0.5.15 => 19
mirabal6878e3f2017-06-05 09:19:26 -0500190#[ $OPENVIM_VER_NUM -ge 5017 ] && DATABASE_TARGET_VER_NUM=20 #0.5.17 => 20
191#[ $OPENVIM_VER_NUM -ge 5018 ] && DATABASE_TARGET_VER_NUM=21 #0.5.18 => 21
garciadeblas259459f2017-11-14 16:27:31 +0100192#[ $OPENVIM_VER_NUM -ge 5021 ] && DATABASE_TARGET_VER_NUM=22 #0.5.21 => 22
tiernoa6933042017-05-24 16:54:33 +0200193# TODO ... put next versions here
tiernof7aa8c42016-09-06 16:43:04 +0200194
tiernof7aa8c42016-09-06 16:43:04 +0200195function upgrade_to_1(){
tierno95a9e832017-04-27 18:49:37 +0200196 # echo " upgrade database from version 0.0 to version 0.1"
tiernof7aa8c42016-09-06 16:43:04 +0200197 echo " CREATE TABLE \`schema_version\`"
tierno1b20f662017-11-16 16:37:58 +0100198 sql "CREATE TABLE \`schema_version\` (
199 \`version_int\` INT NOT NULL COMMENT 'version as a number. Must not contain gaps',
200 \`version\` VARCHAR(20) NOT NULL COMMENT 'version as a text',
201 \`openvim_ver\` VARCHAR(20) NOT NULL COMMENT 'openvim version',
202 \`comments\` VARCHAR(2000) NULL COMMENT 'changes to database',
203 \`date\` DATE NULL,
204 PRIMARY KEY (\`version_int\`)
205 )
206 COMMENT='database schema control version'
207 COLLATE='utf8_general_ci'
208 ENGINE=InnoDB;"
209 sql "INSERT INTO \`schema_version\` (\`version_int\`, \`version\`, \`openvim_ver\`, \`comments\`, \`date\`) "\
210 "VALUES (1, '0.1', '0.2.00', 'insert schema_version; alter nets with last_error column', '2015-05-05');"
tiernof7aa8c42016-09-06 16:43:04 +0200211 echo " ALTER TABLE \`nets\`, ADD COLUMN \`last_error\`"
tierno1b20f662017-11-16 16:37:58 +0100212 sql "ALTER TABLE \`nets\` ADD COLUMN \`last_error\` VARCHAR(200) NULL AFTER \`status\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200213}
214function downgrade_from_1(){
tierno95a9e832017-04-27 18:49:37 +0200215 # echo " downgrade database from version 0.1 to version 0.0"
tiernof7aa8c42016-09-06 16:43:04 +0200216 echo " ALTER TABLE \`nets\` DROP COLUMN \`last_error\`"
tierno1b20f662017-11-16 16:37:58 +0100217 sql "ALTER TABLE \`nets\` DROP COLUMN \`last_error\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200218 echo " DROP TABLE \`schema_version\`"
tierno1b20f662017-11-16 16:37:58 +0100219 sql "DROP TABLE \`schema_version\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200220}
221function upgrade_to_2(){
tierno95a9e832017-04-27 18:49:37 +0200222 # echo " upgrade database from version 0.1 to version 0.2"
tiernof7aa8c42016-09-06 16:43:04 +0200223 echo " ALTER TABLE \`of_ports_pci_correspondence\` \`resources_port\` \`ports\` ADD COLUMN \`switch_dpid\`"
224 for table in of_ports_pci_correspondence resources_port ports
225 do
tierno1b20f662017-11-16 16:37:58 +0100226 sql "ALTER TABLE \`${table}\` "\
227 "ADD COLUMN \`switch_dpid\` CHAR(23) NULL DEFAULT NULL AFTER \`switch_port\`; "
228 sql "ALTER TABLE ${table} CHANGE COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200229 [ $table == of_ports_pci_correspondence ] ||
tierno1b20f662017-11-16 16:37:58 +0100230 sql "ALTER TABLE ${table} DROP INDEX vlan_switch_port, ADD UNIQUE INDEX vlan_switch_port "\
231 "(vlan, switch_port, switch_dpid);"
tiernof7aa8c42016-09-06 16:43:04 +0200232 done
233 echo " UPDATE procedure UpdateSwitchPort"
tierno1b20f662017-11-16 16:37:58 +0100234 sql "DROP PROCEDURE IF EXISTS UpdateSwitchPort;
235 delimiter //
236 CREATE PROCEDURE UpdateSwitchPort() MODIFIES SQL DATA SQL SECURITY INVOKER
237 COMMENT 'Load the openflow switch ports from of_ports_pci_correspondece into resoureces_port and ports'
238 BEGIN
239 #DELETES switch_port entry before writing, because if not it fails for key constrains
240 UPDATE ports
241 RIGHT JOIN resources_port as RP on ports.uuid=RP.port_id
242 INNER JOIN resources_port as RP2 on RP2.id=RP.root_id
243 INNER JOIN numas on RP.numa_id=numas.id
244 INNER JOIN hosts on numas.host_id=hosts.uuid
245 INNER JOIN of_ports_pci_correspondence as PC on hosts.ip_name=PC.ip_name and RP2.pci=PC.pci
246 SET ports.switch_port=null, ports.switch_dpid=null, RP.switch_port=null, RP.switch_dpid=null;
247 #write switch_port into resources_port and ports
248 UPDATE ports
249 RIGHT JOIN resources_port as RP on ports.uuid=RP.port_id
250 INNER JOIN resources_port as RP2 on RP2.id=RP.root_id
251 INNER JOIN numas on RP.numa_id=numas.id
252 INNER JOIN hosts on numas.host_id=hosts.uuid
253 INNER JOIN of_ports_pci_correspondence as PC on hosts.ip_name=PC.ip_name and RP2.pci=PC.pci
254 SET ports.switch_port=PC.switch_port, ports.switch_dpid=PC.switch_dpid, RP.switch_port=PC.switch_port, "\
255 "RP.switch_dpid=PC.switch_dpid;
256 END//
257 delimiter ;"
258 sql "INSERT INTO \`schema_version\` (\`version_int\`, \`version\`, \`openvim_ver\`, \`comments\`, \`date\`) "\
259 "VALUES (2, '0.2', '0.2.03', 'update Procedure UpdateSwitchPort', '2015-05-06');"
tiernof7aa8c42016-09-06 16:43:04 +0200260}
261function upgrade_to_3(){
tierno95a9e832017-04-27 18:49:37 +0200262 # echo " upgrade database from version 0.2 to version 0.3"
tiernof7aa8c42016-09-06 16:43:04 +0200263 echo " change size of source_name at table resources_port"
tierno1b20f662017-11-16 16:37:58 +0100264 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(24) NULL DEFAULT NULL AFTER port_id;"
tiernof7aa8c42016-09-06 16:43:04 +0200265 echo " CREATE PROCEDURE GetAllAvailablePorts"
tierno1b20f662017-11-16 16:37:58 +0100266 sql "delimiter //
267 CREATE PROCEDURE GetAllAvailablePorts(IN Numa INT) CONTAINS SQL SQL SECURITY INVOKER
268 COMMENT 'Obtain all -including those not connected to switch port- ports available for a numa'
269 BEGIN
270 SELECT port_id, pci, Mbps, Mbps - Mbps_consumed as Mbps_free, totalSRIOV - coalesce(usedSRIOV,0) as
271 availableSRIOV, switch_port, mac
272 FROM
273 (
274 SELECT id as port_id, Mbps, pci, switch_port, mac
275 FROM resources_port
276 WHERE numa_id = Numa AND id=root_id AND status = 'ok' AND instance_id IS NULL
277 ) as A
278 INNER JOIN
279 (
280 SELECT root_id, sum(Mbps_used) as Mbps_consumed, COUNT(id)-1 as totalSRIOV
281 FROM resources_port
282 WHERE numa_id = Numa AND status = 'ok'
283 GROUP BY root_id
284 ) as B
285 ON A.port_id = B.root_id
286 LEFT JOIN
287 (
288 SELECT root_id, COUNT(id) as usedSRIOV
289 FROM resources_port
290 WHERE numa_id = Numa AND status = 'ok' AND instance_id IS NOT NULL
291 GROUP BY root_id
292 ) as C
293 ON A.port_id = C.root_id
294 ORDER BY Mbps_free, availableSRIOV, pci;
295 END//
296 delimiter ;"
297 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
298 "VALUES (3, '0.3', '0.2.5', 'New Procedure GetAllAvailablePorts', '2015-07-09');"
tiernof7aa8c42016-09-06 16:43:04 +0200299}
300
301function upgrade_to_4(){
tierno95a9e832017-04-27 18:49:37 +0200302 # echo " upgrade database from version 0.3 to version 0.4"
tiernof7aa8c42016-09-06 16:43:04 +0200303 echo " remove unique VLAN index at 'resources_port', 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100304 sql "ALTER TABLE resources_port DROP INDEX vlan_switch_port;"
305 sql "ALTER TABLE ports DROP INDEX vlan_switch_port;"
tiernof7aa8c42016-09-06 16:43:04 +0200306 echo " change table 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100307 sql "ALTER TABLE ports CHANGE COLUMN model model VARCHAR(12) NULL DEFAULT NULL COMMENT 'driver model for bridge "\
308 "ifaces; PF,VF,VFnotShared for data ifaces' AFTER mac;"
309 sql "ALTER TABLE ports DROP COLUMN vlan_changed;"
310 sql "ALTER TABLE resources_port DROP COLUMN vlan;"
311 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
312 "VALUES (4, '0.4', '0.3.1', 'Remove unique index VLAN at resources_port', '2015-09-04');"
tiernof7aa8c42016-09-06 16:43:04 +0200313}
314
315function upgrade_to_X(){
316 #TODO, this change of foreign key does not work
tierno95a9e832017-04-27 18:49:37 +0200317 # echo " upgrade database from version 0.X to version 0.X"
tierno1b20f662017-11-16 16:37:58 +0100318 sql "ALTER TABLE instances DROP FOREIGN KEY FK_instances_flavors, DROP INDEX FK_instances_flavors, "\
319 "DROP FOREIGN KEY FK_instances_images, DROP INDEX FK_instances_flavors,;"
320 sql "ALTER TABLE instances ADD CONSTRAINT FK_instances_flavors FOREIGN KEY (flavor_id, tenant_id) "\
321 "REFERENCES tenants_flavors (flavor_id, tenant_id), ADD CONSTRAINT FK_instances_images FOREIGN KEY "\
322 "(image_id, tenant_id) REFERENCES tenants_images (image_id, tenant_id);"
tiernof7aa8c42016-09-06 16:43:04 +0200323}
324
325function downgrade_from_2(){
tierno95a9e832017-04-27 18:49:37 +0200326 # echo " downgrade database from version 0.2 to version 0.1"
tiernof7aa8c42016-09-06 16:43:04 +0200327 echo " UPDATE procedure UpdateSwitchPort"
tierno1b20f662017-11-16 16:37:58 +0100328 sql "DROP PROCEDURE IF EXISTS UpdateSwitchPort;
329 delimiter //
330 CREATE PROCEDURE UpdateSwitchPort() MODIFIES SQL DATA SQL SECURITY INVOKER
331 BEGIN
332 UPDATE
333 resources_port INNER JOIN (
334 SELECT resources_port.id,KK.switch_port
335 FROM resources_port INNER JOIN numas on resources_port.numa_id=numas.id
336 INNER JOIN hosts on numas.host_id=hosts.uuid
337 INNER JOIN of_ports_pci_correspondence as KK on hosts.ip_name=KK.ip_name and resources_port.pci=KK.pci
338 ) as TABLA
339 ON resources_port.root_id=TABLA.id
340 SET resources_port.switch_port=TABLA.switch_port
341 WHERE resources_port.root_id=TABLA.id;
342 END//
343 delimiter ;"
tiernof7aa8c42016-09-06 16:43:04 +0200344 echo " ALTER TABLE \`of_ports_pci_correspondence\` \`resources_port\` \`ports\` DROP COLUMN \`switch_dpid\`"
345 for table in of_ports_pci_correspondence resources_port ports
346 do
347 [ $table == of_ports_pci_correspondence ] ||
tierno1b20f662017-11-16 16:37:58 +0100348 sql "ALTER TABLE ${table} DROP INDEX vlan_switch_port, ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port);"
349 sql "ALTER TABLE \`${table}\` DROP COLUMN \`switch_dpid\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200350 switch_port_size=12
351 [ $table == of_ports_pci_correspondence ] && switch_port_size=50
tierno1b20f662017-11-16 16:37:58 +0100352 sql "ALTER TABLE ${table} CHANGE COLUMN switch_port switch_port VARCHAR(${switch_port_size}) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200353 done
tierno1b20f662017-11-16 16:37:58 +0100354 sql "DELETE FROM \`schema_version\` WHERE \`version_int\` = '2';"
tiernof7aa8c42016-09-06 16:43:04 +0200355}
356function downgrade_from_3(){
tierno95a9e832017-04-27 18:49:37 +0200357 # echo " downgrade database from version 0.3 to version 0.2"
tiernof7aa8c42016-09-06 16:43:04 +0200358 echo " change back size of source_name at table resources_port"
tierno1b20f662017-11-16 16:37:58 +0100359 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(20) NULL DEFAULT NULL AFTER port_id;"
tiernof7aa8c42016-09-06 16:43:04 +0200360 echo " DROP PROCEDURE GetAllAvailablePorts"
tierno1b20f662017-11-16 16:37:58 +0100361 sql "DROP PROCEDURE GetAllAvailablePorts;"
362 sql "DELETE FROM schema_version WHERE version_int = '3';"
tiernof7aa8c42016-09-06 16:43:04 +0200363}
364function downgrade_from_4(){
tierno95a9e832017-04-27 18:49:37 +0200365 # echo " downgrade database from version 0.4 to version 0.3"
tiernof7aa8c42016-09-06 16:43:04 +0200366 echo " adding back unique index VLAN at 'resources_port','ports'"
tierno1b20f662017-11-16 16:37:58 +0100367 sql "ALTER TABLE resources_port ADD COLUMN vlan SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER Mbps_used;"
368 sql "UPDATE resources_port SET vlan= 99+id-root_id WHERE id != root_id;"
369 sql "ALTER TABLE resources_port ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port, switch_dpid);"
370 sql "ALTER TABLE ports ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port, switch_dpid);"
tiernof7aa8c42016-09-06 16:43:04 +0200371 echo " change back table 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100372 sql "ALTER TABLE ports CHANGE COLUMN model model VARCHAR(12) NULL DEFAULT NULL AFTER mac;"
373 sql "ALTER TABLE ports ADD COLUMN vlan_changed SMALLINT(5) NULL DEFAULT NULL COMMENT '!=NULL when original vlan "\
374 "have been changed to match a pmp net with all ports in the same vlan' AFTER switch_port;"
375 sql "DELETE FROM schema_version WHERE version_int = '4';"
tiernof7aa8c42016-09-06 16:43:04 +0200376}
377
378
379function upgrade_to_5(){
tierno95a9e832017-04-27 18:49:37 +0200380 # echo " upgrade database from version 0.4 to version 0.5"
tiernof7aa8c42016-09-06 16:43:04 +0200381 echo " add 'ip_address' to ports'"
tierno1b20f662017-11-16 16:37:58 +0100382 sql "ALTER TABLE ports ADD COLUMN ip_address VARCHAR(64) NULL DEFAULT NULL AFTER mac;"
383 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
384 "VALUES (5, '0.5', '0.4.1', 'Add ip_address to ports', '2015-09-04');"
tiernof7aa8c42016-09-06 16:43:04 +0200385}
386function downgrade_from_5(){
tierno95a9e832017-04-27 18:49:37 +0200387 # echo " downgrade database from version 0.5 to version 0.4"
tiernof7aa8c42016-09-06 16:43:04 +0200388 echo " removing 'ip_address' from 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100389 sql "ALTER TABLE ports DROP COLUMN ip_address;"
390 sql "DELETE FROM schema_version WHERE version_int = '5';"
tiernof7aa8c42016-09-06 16:43:04 +0200391}
392
393function upgrade_to_6(){
tierno95a9e832017-04-27 18:49:37 +0200394 # echo " upgrade database from version 0.5 to version 0.6"
tierno1b20f662017-11-16 16:37:58 +0100395 echo " Enlarge name, description to 255 at all database"
tiernof7aa8c42016-09-06 16:43:04 +0200396 for table in flavors images instances tenants
397 do
tierno1b20f662017-11-16 16:37:58 +0100398 name_length=255
399 [[ $table == tenants ]] || name_length=64
400 echo -en " $table \r"
401 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR($name_length) NOT NULL, CHANGE COLUMN description "\
402 "description VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200403 done
404 echo -en " hosts \r"
tierno1b20f662017-11-16 16:37:58 +0100405 sql "ALTER TABLE hosts CHANGE COLUMN name name VARCHAR(255) NOT NULL, CHANGE COLUMN ip_name ip_name VARCHAR(64) "\
406 "NOT NULL, CHANGE COLUMN user user VARCHAR(64) NOT NULL, CHANGE COLUMN password password VARCHAR(64) NULL "\
407 "DEFAULT NULL, CHANGE COLUMN description description VARCHAR(255) NULL DEFAULT NULL, CHANGE COLUMN features "\
408 "features VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200409 echo -en " nets \r"
tierno1b20f662017-11-16 16:37:58 +0100410 sql "ALTER TABLE nets CHANGE COLUMN name name VARCHAR(255) NOT NULL, CHANGE COLUMN last_error last_error "\
411 "VARCHAR(255) NULL DEFAULT NULL, CHANGE COLUMN bind bind VARCHAR(36) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200412 echo -en " instances \r"
tierno1b20f662017-11-16 16:37:58 +0100413 sql "ALTER TABLE instances CHANGE COLUMN last_error last_error VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200414 echo -en " ports \r"
tierno1b20f662017-11-16 16:37:58 +0100415 sql "ALTER TABLE ports CHANGE COLUMN name name VARCHAR(64) NOT NULL, CHANGE COLUMN switch_port switch_port "\
416 "VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid VARCHAR(64) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200417 echo -en " of_flows \r"
tierno1b20f662017-11-16 16:37:58 +0100418 sql "ALTER TABLE of_flows CHANGE COLUMN name name VARCHAR(64) NOT NULL, CHANGE COLUMN net_id net_id VARCHAR(36) "\
419 "NULL DEFAULT NULL, CHANGE COLUMN actions actions VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200420 echo -en " of_ports_pci_cor... \r"
tierno1b20f662017-11-16 16:37:58 +0100421 sql "ALTER TABLE of_ports_pci_correspondence CHANGE COLUMN ip_name ip_name VARCHAR(64) NULL DEFAULT NULL, CHANGE "\
422 "COLUMN switch_port switch_port VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
423 "VARCHAR(64) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200424 echo -en " resources_port \r"
tierno1b20f662017-11-16 16:37:58 +0100425 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(64) NULL DEFAULT NULL, CHANGE "\
426 "COLUMN switch_port switch_port VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
427 "VARCHAR(64) NULL DEFAULT NULL;"
428 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) VALUES "\
429 "(6, '0.6', '0.4.2', 'Enlarging name at database', '2016-02-01');"
tiernof7aa8c42016-09-06 16:43:04 +0200430}
431function downgrade_from_6(){
tierno95a9e832017-04-27 18:49:37 +0200432 # echo " downgrade database from version 0.6 to version 0.5"
tiernof7aa8c42016-09-06 16:43:04 +0200433 echo " Change back name,description to shorter length at all database"
434 for table in flavors images instances tenants
435 do
436 name_length=50
437 [[ $table == flavors ]] || [[ $table == images ]] || name_length=36
438 echo -en " $table \r"
tierno1b20f662017-11-16 16:37:58 +0100439 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR($name_length) NOT NULL, CHANGE COLUMN description "\
440 "description VARCHAR(100) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200441 done
442 echo -en " hosts \r"
tierno1b20f662017-11-16 16:37:58 +0100443 sql "ALTER TABLE hosts CHANGE COLUMN name name VARCHAR(36) NOT NULL, CHANGE COLUMN ip_name ip_name VARCHAR(36) "\
444 "NOT NULL, CHANGE COLUMN user user VARCHAR(36) NOT NULL, CHANGE COLUMN password password VARCHAR(36) NULL "\
445 "DEFAULT NULL, CHANGE COLUMN description description VARCHAR(100) NULL DEFAULT NULL, CHANGE COLUMN features "\
446 "features VARCHAR(50) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200447 echo -en " nets \r"
tierno1b20f662017-11-16 16:37:58 +0100448 sql "ALTER TABLE nets CHANGE COLUMN name name VARCHAR(50) NOT NULL, CHANGE COLUMN last_error last_error "\
449 "VARCHAR(200) NULL DEFAULT NULL, CHANGE COLUMN bind bind VARCHAR(36) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200450 echo -en " instances \r"
tierno1b20f662017-11-16 16:37:58 +0100451 sql "ALTER TABLE instances CHANGE COLUMN last_error last_error VARCHAR(200) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200452 echo -en " ports \r"
tierno1b20f662017-11-16 16:37:58 +0100453 sql "ALTER TABLE ports CHANGE COLUMN name name VARCHAR(25) NULL DEFAULT NULL, CHANGE COLUMN switch_port "\
454 "switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid VARCHAR(23) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200455 echo -en " of_flows \r"
tierno1b20f662017-11-16 16:37:58 +0100456 sql "ALTER TABLE of_flows CHANGE COLUMN name name VARCHAR(50) NULL DEFAULT NULL, CHANGE COLUMN net_id net_id "\
457 "VARCHAR(50) NULL DEFAULT NULL, CHANGE COLUMN actions actions VARCHAR(100) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200458 echo -en " of_ports_pci_cor... \r"
tierno1b20f662017-11-16 16:37:58 +0100459 sql "ALTER TABLE of_ports_pci_correspondence CHANGE COLUMN ip_name ip_name VARCHAR(50) NULL DEFAULT NULL, CHANGE "\
460 "COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
461 "VARCHAR(23) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200462 echo -en " resources_port \r"
tierno1b20f662017-11-16 16:37:58 +0100463 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(24) NULL DEFAULT NULL, CHANGE "\
464 "COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
465 "VARCHAR(23) NULL DEFAULT NULL;"
466 sql "DELETE FROM schema_version WHERE version_int='6';"
tiernof7aa8c42016-09-06 16:43:04 +0200467}
garciadeblas24595392016-09-30 17:49:57 +0200468
tiernof7aa8c42016-09-06 16:43:04 +0200469function upgrade_to_7(){
tierno95a9e832017-04-27 18:49:37 +0200470 # echo " upgrade database from version 0.6 to version 0.7"
tiernof7aa8c42016-09-06 16:43:04 +0200471 echo " add 'bind_net','bind_type','cidr','enable_dhcp' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100472 sql "ALTER TABLE nets ADD COLUMN cidr VARCHAR(64) NULL DEFAULT NULL AFTER bind, ADD COLUMN enable_dhcp "\
473 "ENUM('true','false') NOT NULL DEFAULT 'false' after cidr, ADD COLUMN dhcp_first_ip VARCHAR(64) NULL "\
474 "DEFAULT NULL AFTER enable_dhcp, ADD COLUMN dhcp_last_ip VARCHAR(64) NULL DEFAULT NULL AFTER dhcp_first_ip;"
475 sql "ALTER TABLE nets CHANGE COLUMN bind provider VARCHAR(36) NULL DEFAULT NULL AFTER vlan;"
476 sql "ALTER TABLE nets ADD COLUMN bind_net VARCHAR(36) NULL DEFAULT NULL COMMENT 'To connect with other net' "\
477 "AFTER provider, ADD COLUMN bind_type VARCHAR(36) NULL DEFAULT NULL COMMENT 'VLAN:<tag> to insert/remove' "\
478 "after bind_net;"
479 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
480 "VALUES (7, '0.7', '0.4.5', 'Add bind_net to net table', '2016-02-12');"
tiernof7aa8c42016-09-06 16:43:04 +0200481}
482function downgrade_from_7(){
tierno95a9e832017-04-27 18:49:37 +0200483 # echo " downgrade database from version 0.7 to version 0.6"
tiernof7aa8c42016-09-06 16:43:04 +0200484 echo " removing 'bind_net','bind_type','cidr','enable_dhcp' from 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100485 sql "ALTER TABLE nets CHANGE COLUMN provider bind NULL DEFAULT NULL AFTER vlan;"
486 sql "ALTER TABLE nets DROP COLUMN cidr, DROP COLUMN enable_dhcp, DROP COLUMN bind_net, DROP COLUMN bind_type, "\
487 "DROP COLUMN dhcp_first_ip, DROP COLUMN dhcp_last_ip;"
488 sql "DELETE FROM schema_version WHERE version_int = '7';"
tiernof7aa8c42016-09-06 16:43:04 +0200489}
garciadeblas24595392016-09-30 17:49:57 +0200490
491function upgrade_to_8(){
tierno95a9e832017-04-27 18:49:37 +0200492 # echo " upgrade database from version 0.7 to version 0.8"
garciadeblas24595392016-09-30 17:49:57 +0200493 echo " add column 'checksum' to 'images'"
tierno1b20f662017-11-16 16:37:58 +0100494 sql "ALTER TABLE images ADD COLUMN checksum VARCHAR(32) NULL AFTER name;"
495 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
496 "VALUES (8, '0.8', '0.4.10', 'add column checksum to images', '2016-09-30');"
garciadeblas24595392016-09-30 17:49:57 +0200497}
498function downgrade_from_8(){
tierno95a9e832017-04-27 18:49:37 +0200499 # echo " downgrade database from version 0.8 to version 0.7"
garciadeblas24595392016-09-30 17:49:57 +0200500 echo " remove column 'checksum' from 'images'"
tierno1b20f662017-11-16 16:37:58 +0100501 sql "ALTER TABLE images DROP COLUMN checksum;"
502 sql "DELETE FROM schema_version WHERE version_int = '8';"
garciadeblas24595392016-09-30 17:49:57 +0200503}
504
tierno181f1752017-02-01 16:28:11 +0100505function upgrade_to_9(){
tierno95a9e832017-04-27 18:49:37 +0200506 # echo " upgrade database from version 0.8 to version 0.9"
tierno1b20f662017-11-16 16:37:58 +0100507 echo " change length of columns 'path' and 'name' to 255 in table 'images', and change length of column "\
508 "'name' to 255 in table 'flavors'"
509 sql "ALTER TABLE images CHANGE COLUMN path path VARCHAR(255) NOT NULL AFTER uuid, CHANGE COLUMN name name "\
510 "VARCHAR(255) NOT NULL AFTER path;"
511 sql "ALTER TABLE flavors CHANGE COLUMN name name VARCHAR(255) NOT NULL AFTER uuid;"
512 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
513 "VALUES (9, '0.9', '0.5.1','increase length of columns path and name to 255 in table images, "\
514 "and change length of column name to 255 in table flavors', '2017-01-10');"
tierno181f1752017-02-01 16:28:11 +0100515}
516function downgrade_from_9(){
tierno95a9e832017-04-27 18:49:37 +0200517 # echo " downgrade database from version 0.9 to version 0.8"
garciadeblasf30a6772017-01-10 15:45:17 +0100518 echo " change length of columns 'path' and 'name' to 100 and 64 in table 'images'"
tierno1b20f662017-11-16 16:37:58 +0100519 sql "ALTER TABLE images CHANGE COLUMN path path VARCHAR(100) NOT NULL AFTER uuid, CHANGE COLUMN name name "\
520 "VARCHAR(64) NOT NULL AFTER path;"
521 sql "ALTER TABLE flavors CHANGE COLUMN name name VARCHAR(64) NOT NULL AFTER uuid;"
522 sql "DELETE FROM schema_version WHERE version_int = '9';"
garciadeblasf30a6772017-01-10 15:45:17 +0100523}
524
tiernoc1d1d472017-02-08 14:21:28 +0100525function upgrade_to_10(){
tierno95a9e832017-04-27 18:49:37 +0200526 # echo " upgrade database from version 0.9 to version 0.10"
tiernoc1d1d472017-02-08 14:21:28 +0100527 echo " change types at 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100528 sql "ALTER TABLE ports CHANGE COLUMN type type ENUM('instance:bridge','instance:data','external','instance:ovs',"\
529 "'controller:ovs') NOT NULL DEFAULT 'instance:bridge' AFTER status;"
530 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
531 "VALUES (10, '0.10', '0.5.2', 'change ports type, adding instance:ovs', '2017-02-01');"
tiernoc1d1d472017-02-08 14:21:28 +0100532}
533function downgrade_from_10(){
tierno95a9e832017-04-27 18:49:37 +0200534 # echo " downgrade database from version 0.10 to version 0.9"
tierno181f1752017-02-01 16:28:11 +0100535 echo " change back types at 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100536 sql "ALTER TABLE ports CHANGE COLUMN type type ENUM('instance:bridge','instance:data','external') "\
537 "NOT NULL DEFAULT 'instance:bridge' AFTER status;"
538 sql "DELETE FROM schema_version WHERE version_int = '10';"
tierno181f1752017-02-01 16:28:11 +0100539}
mirabal18f5de32017-02-13 12:41:49 +0100540
541function upgrade_to_11(){
tierno95a9e832017-04-27 18:49:37 +0200542 # echo " upgrade database from version 0.10 to version 0.11"
mirabal18f5de32017-02-13 12:41:49 +0100543 echo " Add gateway_ip colum to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100544 sql "ALTER TABLE nets ADD COLUMN gateway_ip VARCHAR(64) NULL DEFAULT NULL AFTER dhcp_last_ip;"
545 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
546 "VALUES (11, '0.11', '0.5.4', 'Add gateway_ip colum to nets', '2017-02-13');"
mirabal18f5de32017-02-13 12:41:49 +0100547}
548function downgrade_from_11(){
tierno95a9e832017-04-27 18:49:37 +0200549 # echo " downgrade database from version 0.11 to version 0.10"
mirabal18f5de32017-02-13 12:41:49 +0100550 echo " Delete gateway_ip colum from 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100551 sql "ALTER TABLE nets DROP COLUMN gateway_ip;"
552 sql "DELETE FROM schema_version WHERE version_int = '11';"
mirabal18f5de32017-02-13 12:41:49 +0100553}
mirabal9e194592017-02-17 11:03:25 +0100554function upgrade_to_12(){
tierno95a9e832017-04-27 18:49:37 +0200555 # echo " upgrade database from version 0.11 to version 0.12"
mirabal9e194592017-02-17 11:03:25 +0100556 echo " Create of_controller table "
tierno1b20f662017-11-16 16:37:58 +0100557 sql "CREATE TABLE ofcs (
558 uuid VARCHAR(36) NOT NULL,
559 name VARCHAR(255) NOT NULL,
560 dpid VARCHAR(64) NOT NULL,
561 ip VARCHAR(64) NOT NULL,
562 port INT(5) NOT NULL,
563 type VARCHAR(64) NOT NULL,
564 version VARCHAR(12) NULL DEFAULT NULL,
565 user VARCHAR(64) NULL DEFAULT NULL,
566 password VARCHAR(64) NULL DEFAULT NULL,
567 PRIMARY KEY (uuid)
568 )
569 COLLATE='utf8_general_ci'
570 ENGINE=InnoDB;"
mirabal9e194592017-02-17 11:03:25 +0100571 echo " Modify user_at for uuids table"
tierno1b20f662017-11-16 16:37:58 +0100572 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at VARCHAR(64) NULL DEFAULT NULL "\
573 "COMMENT 'Table that uses this UUID' ;"
574 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
575 "VALUES (12, '0.12', '0.5.5', 'Add of_controller table', '2017-02-17');"
mirabal9e194592017-02-17 11:03:25 +0100576}
577
578function downgrade_from_12(){
tierno95a9e832017-04-27 18:49:37 +0200579 # echo " downgrade database from version 0.12 to version 0.11"
mirabal9e194592017-02-17 11:03:25 +0100580 echo " Delete ofcs table"
tierno1b20f662017-11-16 16:37:58 +0100581 sql "DROP TABLE ofcs;"
582 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at ENUM('flavors', 'hosts', 'images', 'instances', "\
583 "'nets', 'ports', 'tenants') NULL DEFAULT NULL COMMENT 'Table that uses this UUID' ;"
584 sql "DELETE FROM schema_version WHERE version_int = '12';"
mirabal9e194592017-02-17 11:03:25 +0100585}
mirabal37829452017-03-09 14:41:21 +0100586
mirabal6045a9d2017-03-06 11:36:55 +0100587function upgrade_to_13(){
tierno95a9e832017-04-27 18:49:37 +0200588 # echo " upgrade database from version 0.12 to version 0.13"
mirabal6045a9d2017-03-06 11:36:55 +0100589 echo " Create of_port_mapings table "
tierno1b20f662017-11-16 16:37:58 +0100590 sql "CREATE TABLE of_port_mappings (
591 uuid VARCHAR(36) NOT NULL,
592 ofc_id VARCHAR(36) NULL DEFAULT NULL,
593 region VARCHAR(64) NULL DEFAULT NULL,
594 compute_node VARCHAR(64) NULL DEFAULT NULL,
595 pci VARCHAR(50) NULL DEFAULT NULL,
596 switch_dpid VARCHAR(64) NULL DEFAULT NULL,
597 switch_port VARCHAR(64) NULL DEFAULT NULL,
598 switch_mac CHAR(18) NULL DEFAULT NULL,
599 UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port),
600 UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac),
601 UNIQUE INDEX region_compute_node_pci (region, compute_node, pci),
602 INDEX FK_of_port_mappings_ofcs (ofc_id),
603 CONSTRAINT FK_of_port_mappings_ofcs FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid) ON UPDATE CASCADE
604 ON DELETE CASCADE)
605 COLLATE='utf8_general_ci'
606 ENGINE=InnoDB;"
607 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
608 "VALUES (13, '0.13', '0.5.6', 'Add of_port_mapings table', '2017-03-09');"
mirabal6045a9d2017-03-06 11:36:55 +0100609}
610
611function downgrade_from_13(){
tierno95a9e832017-04-27 18:49:37 +0200612 # echo " downgrade database from version 0.13 to version 0.12"
mirabal6045a9d2017-03-06 11:36:55 +0100613 echo " Delete of_port_mappings table"
tierno1b20f662017-11-16 16:37:58 +0100614 sql "DROP TABLE of_port_mappings;"
615 sql "DELETE FROM schema_version WHERE version_int = '13';"
mirabal6045a9d2017-03-06 11:36:55 +0100616}
mirabal37829452017-03-09 14:41:21 +0100617
618function upgrade_to_14(){
tierno95a9e832017-04-27 18:49:37 +0200619 # echo " upgrade database from version 0.13 to version 0.14"
mirabal37829452017-03-09 14:41:21 +0100620 echo " Add switch_mac, ofc_id colum to 'ports' and 'resources_port'"
tierno1b20f662017-11-16 16:37:58 +0100621 sql "ALTER TABLE ports
622 ADD COLUMN switch_mac VARCHAR(18) NULL DEFAULT NULL AFTER switch_port,
623 ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER switch_dpid,
624 ADD CONSTRAINT FK_port_ofc_id FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid);"
625 sql "ALTER TABLE resources_port
626 ADD COLUMN switch_mac VARCHAR(18) NULL DEFAULT NULL AFTER switch_port,
627 ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER switch_dpid,
628 ADD CONSTRAINT FK_resource_ofc_id FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid);"
629 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
630 "VALUES (14, '0.14', '0.5.7', 'Add switch_mac, ofc_id colum to ports and resources_port tables', '2017-03-09');"
mirabal37829452017-03-09 14:41:21 +0100631}
632
633function downgrade_from_14(){
tierno95a9e832017-04-27 18:49:37 +0200634 # echo " downgrade database from version 0.14 to version 0.13"
mirabal37829452017-03-09 14:41:21 +0100635 echo " Delete switch_mac, ofc_id colum to 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100636 sql "ALTER TABLE ports DROP COLUMN switch_mac, DROP COLUMN ofc_id, DROP FOREIGN KEY FK_port_ofc_id;"
637 sql "ALTER TABLE resources_port DROP COLUMN switch_mac, DROP COLUMN ofc_id, DROP FOREIGN KEY FK_resource_ofc_id;"
638 sql "DELETE FROM schema_version WHERE version_int = '14';"
mirabal37829452017-03-09 14:41:21 +0100639}
640
mirabalf9a1a8d2017-03-15 12:42:27 +0100641function upgrade_to_15(){
tierno95a9e832017-04-27 18:49:37 +0200642 # echo " upgrade database from version 0.14 to version 0.15"
mirabalf9a1a8d2017-03-15 12:42:27 +0100643 echo " Add ofc_id colum to 'of_flows'"
tierno1b20f662017-11-16 16:37:58 +0100644 sql "ALTER TABLE of_flows ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER net_id, ADD CONSTRAINT "\
645 "FK_of_flows_ofcs FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
646 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
647 "VALUES (15, '0.15', '0.5.8', 'Add ofc_id colum to of_flows', '2017-03-15');"
mirabalf9a1a8d2017-03-15 12:42:27 +0100648}
649
650function downgrade_from_15(){
tierno95a9e832017-04-27 18:49:37 +0200651 # echo " downgrade database from version 0.15 to version 0.14"
mirabalf9a1a8d2017-03-15 12:42:27 +0100652 echo " Delete ofc_id to 'of_flows'"
tierno1b20f662017-11-16 16:37:58 +0100653 sql "ALTER TABLE of_flows DROP COLUMN ofc_id, DROP FOREIGN KEY FK_of_flows_ofcs;"
654 sql "DELETE FROM schema_version WHERE version_int = '15';"
mirabalf9a1a8d2017-03-15 12:42:27 +0100655}
656
mirabal6c600652017-03-16 17:22:57 +0100657
658function upgrade_to_16(){
tierno95a9e832017-04-27 18:49:37 +0200659 # echo " upgrade database from version 0.15 to version 0.16"
mirabal6c600652017-03-16 17:22:57 +0100660 echo " Add last_error and status colum to 'ofcs'"
tierno1b20f662017-11-16 16:37:58 +0100661 sql "ALTER TABLE ofcs ADD COLUMN last_error VARCHAR(255) NULL DEFAULT NULL AFTER password, "\
662 "ADD COLUMN status ENUM('ACTIVE','INACTIVE','ERROR') NULL DEFAULT 'ACTIVE' AFTER last_error;"
663 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
664 "VALUES (16, '0.16', '0.5.9', 'Add last_error and status colum to ofcs', '2017-03-17');"
mirabal6c600652017-03-16 17:22:57 +0100665}
666
667function downgrade_from_16(){
tierno95a9e832017-04-27 18:49:37 +0200668 # echo " downgrade database from version 0.16 to version 0.15"
mirabal6c600652017-03-16 17:22:57 +0100669 echo " Delete last_error and status colum to 'ofcs'"
tierno1b20f662017-11-16 16:37:58 +0100670 sql "ALTER TABLE ofcs DROP COLUMN last_error, DROP COLUMN status;"
671 sql "DELETE FROM schema_version WHERE version_int = '16';"
mirabal6c600652017-03-16 17:22:57 +0100672}
tierno46ca3a92017-04-05 19:49:24 +0200673
674function upgrade_to_17(){
tierno95a9e832017-04-27 18:49:37 +0200675 # echo " upgrade database from version 0.16 to version 0.17"
tierno46ca3a92017-04-05 19:49:24 +0200676 echo " Add pci to the unique indexes switch_dpid_switch_port switch_dpid_switch_mac at of_port_mappings"
tierno1b20f662017-11-16 16:37:58 +0100677 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_port, "\
678 "ADD UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port, pci);"
679 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_mac, "\
680 "ADD UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac, pci);"
tierno46ca3a92017-04-05 19:49:24 +0200681 echo " Add nets_with_same_vlan to table ofcs"
tierno1b20f662017-11-16 16:37:58 +0100682 sql "ALTER TABLE ofcs ADD COLUMN nets_with_same_vlan ENUM('true','false') NOT NULL DEFAULT 'false' AFTER status;"
683 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
684 "VALUES (17, '0.17', '0.5.10', 'Add pci to unique index dpid port/mac at of_port_mappings', '2017-04-05');"
tierno46ca3a92017-04-05 19:49:24 +0200685}
686
687function downgrade_from_17(){
tierno95a9e832017-04-27 18:49:37 +0200688 # echo " downgrade database from version 0.17 to version 0.16"
tierno46ca3a92017-04-05 19:49:24 +0200689 echo " Delete pci fromthe unique indexes switch_dpid_switch_port switch_dpid_switch_mac at of_port_mappings"
tierno1b20f662017-11-16 16:37:58 +0100690 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_port, "\
691 "ADD UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port);"
692 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_mac, "\
693 "ADD UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac);"
tierno46ca3a92017-04-05 19:49:24 +0200694 echo " Remove nets_with_same_vlan from table ofcs"
tierno1b20f662017-11-16 16:37:58 +0100695 sql "ALTER TABLE ofcs DROP COLUMN nets_with_same_vlan;"
696 sql "DELETE FROM schema_version WHERE version_int = '17';"
tierno46ca3a92017-04-05 19:49:24 +0200697}
698
tiernoa290d8f2017-05-03 17:42:52 +0200699function upgrade_to_18(){
700 echo " Add 'region' at 'nets' and change unique index vlan+region"
tierno1b20f662017-11-16 16:37:58 +0100701 sql "ALTER TABLE nets ADD COLUMN region VARCHAR(64) NULL DEFAULT NULL AFTER admin_state_up, DROP INDEX type_vlan;"
tiernoa290d8f2017-05-03 17:42:52 +0200702 echo " Fill 'region' with __OVS__/__DATA__ for OVS/openflow provider at nets"
tierno1b20f662017-11-16 16:37:58 +0100703 sql "UPDATE nets set region='__OVS__' where provider like 'OVS%';"
704 sql "UPDATE nets set region='__DATA__' where type='data' or type='ptp';"
tiernoa290d8f2017-05-03 17:42:52 +0200705 echo " Create new index region_vlan at nets"
tierno1b20f662017-11-16 16:37:58 +0100706 sql "ALTER TABLE nets ADD UNIQUE INDEX region_vlan (region, vlan);"
707 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
708 "VALUES (18, '0.18', '0.5.13', 'Add region to nets, change vlan unique index', '2017-05-03');"
tiernoa290d8f2017-05-03 17:42:52 +0200709}
710
711function downgrade_from_18(){
712 echo " Delete 'region' at 'nets' and change back unique index vlan+type"
tierno1b20f662017-11-16 16:37:58 +0100713 sql "ALTER TABLE nets DROP INDEX region_vlan, DROP COLUMN region;"
tiernoa290d8f2017-05-03 17:42:52 +0200714 echo " Create back index type_vlan at nets"
tierno1b20f662017-11-16 16:37:58 +0100715 sql "ALTER TABLE nets ADD UNIQUE INDEX type_vlan (type, vlan);"
716 sql "DELETE FROM schema_version WHERE version_int = '18';"
tiernoa290d8f2017-05-03 17:42:52 +0200717}
718
tiernoa6933042017-05-24 16:54:33 +0200719function upgrade_to_19(){
720 echo " Add 'keyfile' to 'hosts'"
tierno1b20f662017-11-16 16:37:58 +0100721 sql "ALTER TABLE hosts ADD COLUMN keyfile VARCHAR(255) NULL DEFAULT NULL AFTER password;"
722 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
723 "VALUES (19, '0.19', '0.5.15', 'Add keyfile to hosts', '2017-05-23');"
tiernoa6933042017-05-24 16:54:33 +0200724}
725
726function downgrade_from_19(){
727 echo " Delete 'keyfile' from 'hosts'"
tierno1b20f662017-11-16 16:37:58 +0100728 sql "ALTER TABLE hosts DROP COLUMN keyfile;"
729 sql "DELETE FROM schema_version WHERE version_int = '19';"
tiernoa6933042017-05-24 16:54:33 +0200730}
731
mirabalcaeb2242017-05-31 10:52:22 -0500732function upgrade_to_20(){
733 echo " Add 'image_size' to 'instance_devices'"
tierno1b20f662017-11-16 16:37:58 +0100734 sql "ALTER TABLE instance_devices ADD COLUMN image_size INT NULL DEFAULT NULL AFTER dev;"
735 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
736 "VALUES (20, '0.20', '0.5.17', 'Add image_size to instance_devices', '2017-06-01');"
mirabalcaeb2242017-05-31 10:52:22 -0500737}
738
739function downgrade_from_20(){
740 echo " Delete 'image_size' from 'instance_devices'"
tierno1b20f662017-11-16 16:37:58 +0100741 sql "ALTER TABLE instance_devices DROP COLUMN image_size;"
742 sql "DELETE FROM schema_version WHERE version_int = '20';"
mirabalcaeb2242017-05-31 10:52:22 -0500743}
tiernoa6933042017-05-24 16:54:33 +0200744
mirabal6878e3f2017-06-05 09:19:26 -0500745function upgrade_to_21(){
746 echo " Add 'routes', 'links' and 'dns' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100747 sql "ALTER TABLE nets ADD COLUMN dns VARCHAR(255) NULL AFTER gateway_ip, "\
748 "ADD COLUMN links TEXT(2000) NULL AFTER dns, "\
749 "ADD COLUMN routes TEXT(2000) NULL AFTER links;"
750 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
751 "VALUES (21, '0.21', '0.5.18', 'Add routes, links and dns to inets', '2017-06-21');"
mirabal6878e3f2017-06-05 09:19:26 -0500752}
753
754function downgrade_from_21(){
755 echo " Delete 'routes', 'links' and 'dns' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100756 sql "ALTER TABLE nets DROP COLUMN dns, DROP COLUMN links, DROP COLUMN routes;"
757 sql "DELETE FROM schema_version WHERE version_int = '21';"
mirabal6878e3f2017-06-05 09:19:26 -0500758}
759
garciadeblas259459f2017-11-14 16:27:31 +0100760function upgrade_to_22(){
761 echo " Changed type of ram in 'flavors' from SMALLINT to MEDIUMINT"
tierno1b20f662017-11-16 16:37:58 +0100762 sql "ALTER TABLE flavors CHANGE COLUMN ram ram MEDIUMINT(7) UNSIGNED NULL DEFAULT NULL AFTER disk;"
763 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
764 "VALUES (22, '0.22', '0.5.21', 'Changed type of ram in flavors from SMALLINT to MEDIUMINT', '2017-11-14');"
garciadeblas259459f2017-11-14 16:27:31 +0100765}
766
767function downgrade_from_22(){
768 echo " Changed type of ram in 'flavors' from MEDIUMINT to SMALLINT"
tierno1b20f662017-11-16 16:37:58 +0100769 sql "ALTER TABLE flavors CHANGE COLUMN ram ram SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER disk;"
770 sql "DELETE FROM schema_version WHERE version_int = '22';"
garciadeblas259459f2017-11-14 16:27:31 +0100771}
772
tierno1b20f662017-11-16 16:37:58 +0100773# TODO ... put functions here
tiernof7aa8c42016-09-06 16:43:04 +0200774
tierno95a9e832017-04-27 18:49:37 +0200775# echo "db version = "${DATABASE_VER_NUM}
tierno1b20f662017-11-16 16:37:58 +0100776[ $DB_VERSION -eq $DATABASE_VER_NUM ] && echo " current database version '$DATABASE_VER_NUM' is ok" && exit 0
777
778# Create a backup database content
779TEMPFILE2="$(mktemp -q --tmpdir "backupdb.XXXXXX.sql")"
780trap 'rm -f "$TEMPFILE2"' EXIT
781mysqldump $DEF_EXTRA_FILE_PARAM --add-drop-table --add-drop-database --routines --databases $DBNAME > $TEMPFILE2
782
783function rollback_db()
784{
785 cat $TEMPFILE2 | mysql $DEF_EXTRA_FILE_PARAM && echo " Aborted! Rollback database OK" ||
786 echo " Aborted! Rollback database FAIL"
787 exit 1
788}
789
790function sql() # send a sql command
791{
792 echo "$*" | $DBCMD || ! echo " ERROR with command '$*'" || rollback_db
793 return 0
794}
795
tiernof7aa8c42016-09-06 16:43:04 +0200796#UPGRADE DATABASE step by step
tierno95a9e832017-04-27 18:49:37 +0200797while [ $DB_VERSION -gt $DATABASE_VER_NUM ]
tiernof7aa8c42016-09-06 16:43:04 +0200798do
tierno95a9e832017-04-27 18:49:37 +0200799 echo " upgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM+1))'"
tiernof7aa8c42016-09-06 16:43:04 +0200800 DATABASE_VER_NUM=$((DATABASE_VER_NUM+1))
tiernof7aa8c42016-09-06 16:43:04 +0200801 upgrade_to_${DATABASE_VER_NUM}
802 #FILE_="${DIRNAME}/upgrade_to_${DATABASE_VER_NUM}.sh"
803 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to upgrade" >&2 && exit -1
804 #$FILE_ || exit -1 # if fail return
805done
806
807#DOWNGRADE DATABASE step by step
tierno95a9e832017-04-27 18:49:37 +0200808while [ $DB_VERSION -lt $DATABASE_VER_NUM ]
tiernof7aa8c42016-09-06 16:43:04 +0200809do
tierno95a9e832017-04-27 18:49:37 +0200810 echo " downgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM-1))'"
tiernof7aa8c42016-09-06 16:43:04 +0200811 #FILE_="${DIRNAME}/downgrade_from_${DATABASE_VER_NUM}.sh"
812 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to downgrade" >&2 && exit -1
813 #$FILE_ || exit -1 # if fail return
814 downgrade_from_${DATABASE_VER_NUM}
815 DATABASE_VER_NUM=$((DATABASE_VER_NUM-1))
816done
817
818#echo done
819