blob: 9d59b2b5e87b9914f49e13373211886072539ecd [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
Paolo Lungaroni423a4082018-02-14 18:05:02 +010036LAST_DB_VERSION=23
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
Paolo Lungaroni423a4082018-02-14 18:05:02 +0100193#[ $OPENVIM_VER_NUM -ge 5024 ] && DATABASE_TARGET_VER_NUM=23 #0.5.24 => 23
tiernoa6933042017-05-24 16:54:33 +0200194# TODO ... put next versions here
tiernof7aa8c42016-09-06 16:43:04 +0200195
tiernof7aa8c42016-09-06 16:43:04 +0200196function upgrade_to_1(){
tierno95a9e832017-04-27 18:49:37 +0200197 # echo " upgrade database from version 0.0 to version 0.1"
tiernof7aa8c42016-09-06 16:43:04 +0200198 echo " CREATE TABLE \`schema_version\`"
tierno1b20f662017-11-16 16:37:58 +0100199 sql "CREATE TABLE \`schema_version\` (
200 \`version_int\` INT NOT NULL COMMENT 'version as a number. Must not contain gaps',
201 \`version\` VARCHAR(20) NOT NULL COMMENT 'version as a text',
202 \`openvim_ver\` VARCHAR(20) NOT NULL COMMENT 'openvim version',
203 \`comments\` VARCHAR(2000) NULL COMMENT 'changes to database',
204 \`date\` DATE NULL,
205 PRIMARY KEY (\`version_int\`)
206 )
207 COMMENT='database schema control version'
208 COLLATE='utf8_general_ci'
209 ENGINE=InnoDB;"
210 sql "INSERT INTO \`schema_version\` (\`version_int\`, \`version\`, \`openvim_ver\`, \`comments\`, \`date\`) "\
211 "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 +0200212 echo " ALTER TABLE \`nets\`, ADD COLUMN \`last_error\`"
tierno1b20f662017-11-16 16:37:58 +0100213 sql "ALTER TABLE \`nets\` ADD COLUMN \`last_error\` VARCHAR(200) NULL AFTER \`status\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200214}
215function downgrade_from_1(){
tierno95a9e832017-04-27 18:49:37 +0200216 # echo " downgrade database from version 0.1 to version 0.0"
tiernof7aa8c42016-09-06 16:43:04 +0200217 echo " ALTER TABLE \`nets\` DROP COLUMN \`last_error\`"
tierno1b20f662017-11-16 16:37:58 +0100218 sql "ALTER TABLE \`nets\` DROP COLUMN \`last_error\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200219 echo " DROP TABLE \`schema_version\`"
tierno1b20f662017-11-16 16:37:58 +0100220 sql "DROP TABLE \`schema_version\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200221}
222function upgrade_to_2(){
tierno95a9e832017-04-27 18:49:37 +0200223 # echo " upgrade database from version 0.1 to version 0.2"
tiernof7aa8c42016-09-06 16:43:04 +0200224 echo " ALTER TABLE \`of_ports_pci_correspondence\` \`resources_port\` \`ports\` ADD COLUMN \`switch_dpid\`"
225 for table in of_ports_pci_correspondence resources_port ports
226 do
tierno1b20f662017-11-16 16:37:58 +0100227 sql "ALTER TABLE \`${table}\` "\
228 "ADD COLUMN \`switch_dpid\` CHAR(23) NULL DEFAULT NULL AFTER \`switch_port\`; "
229 sql "ALTER TABLE ${table} CHANGE COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200230 [ $table == of_ports_pci_correspondence ] ||
tierno1b20f662017-11-16 16:37:58 +0100231 sql "ALTER TABLE ${table} DROP INDEX vlan_switch_port, ADD UNIQUE INDEX vlan_switch_port "\
232 "(vlan, switch_port, switch_dpid);"
tiernof7aa8c42016-09-06 16:43:04 +0200233 done
234 echo " UPDATE procedure UpdateSwitchPort"
tierno1b20f662017-11-16 16:37:58 +0100235 sql "DROP PROCEDURE IF EXISTS UpdateSwitchPort;
236 delimiter //
237 CREATE PROCEDURE UpdateSwitchPort() MODIFIES SQL DATA SQL SECURITY INVOKER
238 COMMENT 'Load the openflow switch ports from of_ports_pci_correspondece into resoureces_port and ports'
239 BEGIN
240 #DELETES switch_port entry before writing, because if not it fails for key constrains
241 UPDATE ports
242 RIGHT JOIN resources_port as RP on ports.uuid=RP.port_id
243 INNER JOIN resources_port as RP2 on RP2.id=RP.root_id
244 INNER JOIN numas on RP.numa_id=numas.id
245 INNER JOIN hosts on numas.host_id=hosts.uuid
246 INNER JOIN of_ports_pci_correspondence as PC on hosts.ip_name=PC.ip_name and RP2.pci=PC.pci
247 SET ports.switch_port=null, ports.switch_dpid=null, RP.switch_port=null, RP.switch_dpid=null;
248 #write switch_port into resources_port and ports
249 UPDATE ports
250 RIGHT JOIN resources_port as RP on ports.uuid=RP.port_id
251 INNER JOIN resources_port as RP2 on RP2.id=RP.root_id
252 INNER JOIN numas on RP.numa_id=numas.id
253 INNER JOIN hosts on numas.host_id=hosts.uuid
254 INNER JOIN of_ports_pci_correspondence as PC on hosts.ip_name=PC.ip_name and RP2.pci=PC.pci
255 SET ports.switch_port=PC.switch_port, ports.switch_dpid=PC.switch_dpid, RP.switch_port=PC.switch_port, "\
256 "RP.switch_dpid=PC.switch_dpid;
257 END//
258 delimiter ;"
259 sql "INSERT INTO \`schema_version\` (\`version_int\`, \`version\`, \`openvim_ver\`, \`comments\`, \`date\`) "\
260 "VALUES (2, '0.2', '0.2.03', 'update Procedure UpdateSwitchPort', '2015-05-06');"
tiernof7aa8c42016-09-06 16:43:04 +0200261}
262function upgrade_to_3(){
tierno95a9e832017-04-27 18:49:37 +0200263 # echo " upgrade database from version 0.2 to version 0.3"
tiernof7aa8c42016-09-06 16:43:04 +0200264 echo " change size of source_name at table resources_port"
tierno1b20f662017-11-16 16:37:58 +0100265 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 +0200266 echo " CREATE PROCEDURE GetAllAvailablePorts"
tierno1b20f662017-11-16 16:37:58 +0100267 sql "delimiter //
268 CREATE PROCEDURE GetAllAvailablePorts(IN Numa INT) CONTAINS SQL SQL SECURITY INVOKER
269 COMMENT 'Obtain all -including those not connected to switch port- ports available for a numa'
270 BEGIN
271 SELECT port_id, pci, Mbps, Mbps - Mbps_consumed as Mbps_free, totalSRIOV - coalesce(usedSRIOV,0) as
272 availableSRIOV, switch_port, mac
273 FROM
274 (
275 SELECT id as port_id, Mbps, pci, switch_port, mac
276 FROM resources_port
277 WHERE numa_id = Numa AND id=root_id AND status = 'ok' AND instance_id IS NULL
278 ) as A
279 INNER JOIN
280 (
281 SELECT root_id, sum(Mbps_used) as Mbps_consumed, COUNT(id)-1 as totalSRIOV
282 FROM resources_port
283 WHERE numa_id = Numa AND status = 'ok'
284 GROUP BY root_id
285 ) as B
286 ON A.port_id = B.root_id
287 LEFT JOIN
288 (
289 SELECT root_id, COUNT(id) as usedSRIOV
290 FROM resources_port
291 WHERE numa_id = Numa AND status = 'ok' AND instance_id IS NOT NULL
292 GROUP BY root_id
293 ) as C
294 ON A.port_id = C.root_id
295 ORDER BY Mbps_free, availableSRIOV, pci;
296 END//
297 delimiter ;"
298 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
299 "VALUES (3, '0.3', '0.2.5', 'New Procedure GetAllAvailablePorts', '2015-07-09');"
tiernof7aa8c42016-09-06 16:43:04 +0200300}
301
302function upgrade_to_4(){
tierno95a9e832017-04-27 18:49:37 +0200303 # echo " upgrade database from version 0.3 to version 0.4"
tiernof7aa8c42016-09-06 16:43:04 +0200304 echo " remove unique VLAN index at 'resources_port', 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100305 sql "ALTER TABLE resources_port DROP INDEX vlan_switch_port;"
306 sql "ALTER TABLE ports DROP INDEX vlan_switch_port;"
tiernof7aa8c42016-09-06 16:43:04 +0200307 echo " change table 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100308 sql "ALTER TABLE ports CHANGE COLUMN model model VARCHAR(12) NULL DEFAULT NULL COMMENT 'driver model for bridge "\
309 "ifaces; PF,VF,VFnotShared for data ifaces' AFTER mac;"
310 sql "ALTER TABLE ports DROP COLUMN vlan_changed;"
311 sql "ALTER TABLE resources_port DROP COLUMN vlan;"
312 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
313 "VALUES (4, '0.4', '0.3.1', 'Remove unique index VLAN at resources_port', '2015-09-04');"
tiernof7aa8c42016-09-06 16:43:04 +0200314}
315
316function upgrade_to_X(){
317 #TODO, this change of foreign key does not work
tierno95a9e832017-04-27 18:49:37 +0200318 # echo " upgrade database from version 0.X to version 0.X"
tierno1b20f662017-11-16 16:37:58 +0100319 sql "ALTER TABLE instances DROP FOREIGN KEY FK_instances_flavors, DROP INDEX FK_instances_flavors, "\
320 "DROP FOREIGN KEY FK_instances_images, DROP INDEX FK_instances_flavors,;"
321 sql "ALTER TABLE instances ADD CONSTRAINT FK_instances_flavors FOREIGN KEY (flavor_id, tenant_id) "\
322 "REFERENCES tenants_flavors (flavor_id, tenant_id), ADD CONSTRAINT FK_instances_images FOREIGN KEY "\
323 "(image_id, tenant_id) REFERENCES tenants_images (image_id, tenant_id);"
tiernof7aa8c42016-09-06 16:43:04 +0200324}
325
326function downgrade_from_2(){
tierno95a9e832017-04-27 18:49:37 +0200327 # echo " downgrade database from version 0.2 to version 0.1"
tiernof7aa8c42016-09-06 16:43:04 +0200328 echo " UPDATE procedure UpdateSwitchPort"
tierno1b20f662017-11-16 16:37:58 +0100329 sql "DROP PROCEDURE IF EXISTS UpdateSwitchPort;
330 delimiter //
331 CREATE PROCEDURE UpdateSwitchPort() MODIFIES SQL DATA SQL SECURITY INVOKER
332 BEGIN
333 UPDATE
334 resources_port INNER JOIN (
335 SELECT resources_port.id,KK.switch_port
336 FROM resources_port INNER JOIN numas on resources_port.numa_id=numas.id
337 INNER JOIN hosts on numas.host_id=hosts.uuid
338 INNER JOIN of_ports_pci_correspondence as KK on hosts.ip_name=KK.ip_name and resources_port.pci=KK.pci
339 ) as TABLA
340 ON resources_port.root_id=TABLA.id
341 SET resources_port.switch_port=TABLA.switch_port
342 WHERE resources_port.root_id=TABLA.id;
343 END//
344 delimiter ;"
tiernof7aa8c42016-09-06 16:43:04 +0200345 echo " ALTER TABLE \`of_ports_pci_correspondence\` \`resources_port\` \`ports\` DROP COLUMN \`switch_dpid\`"
346 for table in of_ports_pci_correspondence resources_port ports
347 do
348 [ $table == of_ports_pci_correspondence ] ||
tierno1b20f662017-11-16 16:37:58 +0100349 sql "ALTER TABLE ${table} DROP INDEX vlan_switch_port, ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port);"
350 sql "ALTER TABLE \`${table}\` DROP COLUMN \`switch_dpid\`;"
tiernof7aa8c42016-09-06 16:43:04 +0200351 switch_port_size=12
352 [ $table == of_ports_pci_correspondence ] && switch_port_size=50
tierno1b20f662017-11-16 16:37:58 +0100353 sql "ALTER TABLE ${table} CHANGE COLUMN switch_port switch_port VARCHAR(${switch_port_size}) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200354 done
tierno1b20f662017-11-16 16:37:58 +0100355 sql "DELETE FROM \`schema_version\` WHERE \`version_int\` = '2';"
tiernof7aa8c42016-09-06 16:43:04 +0200356}
357function downgrade_from_3(){
tierno95a9e832017-04-27 18:49:37 +0200358 # echo " downgrade database from version 0.3 to version 0.2"
tiernof7aa8c42016-09-06 16:43:04 +0200359 echo " change back size of source_name at table resources_port"
tierno1b20f662017-11-16 16:37:58 +0100360 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 +0200361 echo " DROP PROCEDURE GetAllAvailablePorts"
tierno1b20f662017-11-16 16:37:58 +0100362 sql "DROP PROCEDURE GetAllAvailablePorts;"
363 sql "DELETE FROM schema_version WHERE version_int = '3';"
tiernof7aa8c42016-09-06 16:43:04 +0200364}
365function downgrade_from_4(){
tierno95a9e832017-04-27 18:49:37 +0200366 # echo " downgrade database from version 0.4 to version 0.3"
tiernof7aa8c42016-09-06 16:43:04 +0200367 echo " adding back unique index VLAN at 'resources_port','ports'"
tierno1b20f662017-11-16 16:37:58 +0100368 sql "ALTER TABLE resources_port ADD COLUMN vlan SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER Mbps_used;"
369 sql "UPDATE resources_port SET vlan= 99+id-root_id WHERE id != root_id;"
370 sql "ALTER TABLE resources_port ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port, switch_dpid);"
371 sql "ALTER TABLE ports ADD UNIQUE INDEX vlan_switch_port (vlan, switch_port, switch_dpid);"
tiernof7aa8c42016-09-06 16:43:04 +0200372 echo " change back table 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100373 sql "ALTER TABLE ports CHANGE COLUMN model model VARCHAR(12) NULL DEFAULT NULL AFTER mac;"
374 sql "ALTER TABLE ports ADD COLUMN vlan_changed SMALLINT(5) NULL DEFAULT NULL COMMENT '!=NULL when original vlan "\
375 "have been changed to match a pmp net with all ports in the same vlan' AFTER switch_port;"
376 sql "DELETE FROM schema_version WHERE version_int = '4';"
tiernof7aa8c42016-09-06 16:43:04 +0200377}
378
379
380function upgrade_to_5(){
tierno95a9e832017-04-27 18:49:37 +0200381 # echo " upgrade database from version 0.4 to version 0.5"
tiernof7aa8c42016-09-06 16:43:04 +0200382 echo " add 'ip_address' to ports'"
tierno1b20f662017-11-16 16:37:58 +0100383 sql "ALTER TABLE ports ADD COLUMN ip_address VARCHAR(64) NULL DEFAULT NULL AFTER mac;"
384 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
385 "VALUES (5, '0.5', '0.4.1', 'Add ip_address to ports', '2015-09-04');"
tiernof7aa8c42016-09-06 16:43:04 +0200386}
387function downgrade_from_5(){
tierno95a9e832017-04-27 18:49:37 +0200388 # echo " downgrade database from version 0.5 to version 0.4"
tiernof7aa8c42016-09-06 16:43:04 +0200389 echo " removing 'ip_address' from 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100390 sql "ALTER TABLE ports DROP COLUMN ip_address;"
391 sql "DELETE FROM schema_version WHERE version_int = '5';"
tiernof7aa8c42016-09-06 16:43:04 +0200392}
393
394function upgrade_to_6(){
tierno95a9e832017-04-27 18:49:37 +0200395 # echo " upgrade database from version 0.5 to version 0.6"
tierno1b20f662017-11-16 16:37:58 +0100396 echo " Enlarge name, description to 255 at all database"
tiernof7aa8c42016-09-06 16:43:04 +0200397 for table in flavors images instances tenants
398 do
tierno1b20f662017-11-16 16:37:58 +0100399 name_length=255
400 [[ $table == tenants ]] || name_length=64
401 echo -en " $table \r"
402 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR($name_length) NOT NULL, CHANGE COLUMN description "\
403 "description VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200404 done
405 echo -en " hosts \r"
tierno1b20f662017-11-16 16:37:58 +0100406 sql "ALTER TABLE hosts CHANGE COLUMN name name VARCHAR(255) NOT NULL, CHANGE COLUMN ip_name ip_name VARCHAR(64) "\
407 "NOT NULL, CHANGE COLUMN user user VARCHAR(64) NOT NULL, CHANGE COLUMN password password VARCHAR(64) NULL "\
408 "DEFAULT NULL, CHANGE COLUMN description description VARCHAR(255) NULL DEFAULT NULL, CHANGE COLUMN features "\
409 "features VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200410 echo -en " nets \r"
tierno1b20f662017-11-16 16:37:58 +0100411 sql "ALTER TABLE nets CHANGE COLUMN name name VARCHAR(255) NOT NULL, CHANGE COLUMN last_error last_error "\
412 "VARCHAR(255) NULL DEFAULT NULL, CHANGE COLUMN bind bind VARCHAR(36) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200413 echo -en " instances \r"
tierno1b20f662017-11-16 16:37:58 +0100414 sql "ALTER TABLE instances CHANGE COLUMN last_error last_error VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200415 echo -en " ports \r"
tierno1b20f662017-11-16 16:37:58 +0100416 sql "ALTER TABLE ports CHANGE COLUMN name name VARCHAR(64) NOT NULL, CHANGE COLUMN switch_port switch_port "\
417 "VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid VARCHAR(64) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200418 echo -en " of_flows \r"
tierno1b20f662017-11-16 16:37:58 +0100419 sql "ALTER TABLE of_flows CHANGE COLUMN name name VARCHAR(64) NOT NULL, CHANGE COLUMN net_id net_id VARCHAR(36) "\
420 "NULL DEFAULT NULL, CHANGE COLUMN actions actions VARCHAR(255) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200421 echo -en " of_ports_pci_cor... \r"
tierno1b20f662017-11-16 16:37:58 +0100422 sql "ALTER TABLE of_ports_pci_correspondence CHANGE COLUMN ip_name ip_name VARCHAR(64) NULL DEFAULT NULL, CHANGE "\
423 "COLUMN switch_port switch_port VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
424 "VARCHAR(64) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200425 echo -en " resources_port \r"
tierno1b20f662017-11-16 16:37:58 +0100426 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(64) NULL DEFAULT NULL, CHANGE "\
427 "COLUMN switch_port switch_port VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
428 "VARCHAR(64) NULL DEFAULT NULL;"
429 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) VALUES "\
430 "(6, '0.6', '0.4.2', 'Enlarging name at database', '2016-02-01');"
tiernof7aa8c42016-09-06 16:43:04 +0200431}
432function downgrade_from_6(){
tierno95a9e832017-04-27 18:49:37 +0200433 # echo " downgrade database from version 0.6 to version 0.5"
tiernof7aa8c42016-09-06 16:43:04 +0200434 echo " Change back name,description to shorter length at all database"
435 for table in flavors images instances tenants
436 do
437 name_length=50
438 [[ $table == flavors ]] || [[ $table == images ]] || name_length=36
439 echo -en " $table \r"
tierno1b20f662017-11-16 16:37:58 +0100440 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR($name_length) NOT NULL, CHANGE COLUMN description "\
441 "description VARCHAR(100) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200442 done
443 echo -en " hosts \r"
tierno1b20f662017-11-16 16:37:58 +0100444 sql "ALTER TABLE hosts CHANGE COLUMN name name VARCHAR(36) NOT NULL, CHANGE COLUMN ip_name ip_name VARCHAR(36) "\
445 "NOT NULL, CHANGE COLUMN user user VARCHAR(36) NOT NULL, CHANGE COLUMN password password VARCHAR(36) NULL "\
446 "DEFAULT NULL, CHANGE COLUMN description description VARCHAR(100) NULL DEFAULT NULL, CHANGE COLUMN features "\
447 "features VARCHAR(50) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200448 echo -en " nets \r"
tierno1b20f662017-11-16 16:37:58 +0100449 sql "ALTER TABLE nets CHANGE COLUMN name name VARCHAR(50) NOT NULL, CHANGE COLUMN last_error last_error "\
450 "VARCHAR(200) NULL DEFAULT NULL, CHANGE COLUMN bind bind VARCHAR(36) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200451 echo -en " instances \r"
tierno1b20f662017-11-16 16:37:58 +0100452 sql "ALTER TABLE instances CHANGE COLUMN last_error last_error VARCHAR(200) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200453 echo -en " ports \r"
tierno1b20f662017-11-16 16:37:58 +0100454 sql "ALTER TABLE ports CHANGE COLUMN name name VARCHAR(25) NULL DEFAULT NULL, CHANGE COLUMN switch_port "\
455 "switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid VARCHAR(23) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200456 echo -en " of_flows \r"
tierno1b20f662017-11-16 16:37:58 +0100457 sql "ALTER TABLE of_flows CHANGE COLUMN name name VARCHAR(50) NULL DEFAULT NULL, CHANGE COLUMN net_id net_id "\
458 "VARCHAR(50) NULL DEFAULT NULL, CHANGE COLUMN actions actions VARCHAR(100) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200459 echo -en " of_ports_pci_cor... \r"
tierno1b20f662017-11-16 16:37:58 +0100460 sql "ALTER TABLE of_ports_pci_correspondence CHANGE COLUMN ip_name ip_name VARCHAR(50) NULL DEFAULT NULL, CHANGE "\
461 "COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
462 "VARCHAR(23) NULL DEFAULT NULL;"
tiernof7aa8c42016-09-06 16:43:04 +0200463 echo -en " resources_port \r"
tierno1b20f662017-11-16 16:37:58 +0100464 sql "ALTER TABLE resources_port CHANGE COLUMN source_name source_name VARCHAR(24) NULL DEFAULT NULL, CHANGE "\
465 "COLUMN switch_port switch_port VARCHAR(24) NULL DEFAULT NULL, CHANGE COLUMN switch_dpid switch_dpid "\
466 "VARCHAR(23) NULL DEFAULT NULL;"
467 sql "DELETE FROM schema_version WHERE version_int='6';"
tiernof7aa8c42016-09-06 16:43:04 +0200468}
garciadeblas24595392016-09-30 17:49:57 +0200469
tiernof7aa8c42016-09-06 16:43:04 +0200470function upgrade_to_7(){
tierno95a9e832017-04-27 18:49:37 +0200471 # echo " upgrade database from version 0.6 to version 0.7"
tiernof7aa8c42016-09-06 16:43:04 +0200472 echo " add 'bind_net','bind_type','cidr','enable_dhcp' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100473 sql "ALTER TABLE nets ADD COLUMN cidr VARCHAR(64) NULL DEFAULT NULL AFTER bind, ADD COLUMN enable_dhcp "\
474 "ENUM('true','false') NOT NULL DEFAULT 'false' after cidr, ADD COLUMN dhcp_first_ip VARCHAR(64) NULL "\
475 "DEFAULT NULL AFTER enable_dhcp, ADD COLUMN dhcp_last_ip VARCHAR(64) NULL DEFAULT NULL AFTER dhcp_first_ip;"
476 sql "ALTER TABLE nets CHANGE COLUMN bind provider VARCHAR(36) NULL DEFAULT NULL AFTER vlan;"
477 sql "ALTER TABLE nets ADD COLUMN bind_net VARCHAR(36) NULL DEFAULT NULL COMMENT 'To connect with other net' "\
478 "AFTER provider, ADD COLUMN bind_type VARCHAR(36) NULL DEFAULT NULL COMMENT 'VLAN:<tag> to insert/remove' "\
479 "after bind_net;"
480 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
481 "VALUES (7, '0.7', '0.4.5', 'Add bind_net to net table', '2016-02-12');"
tiernof7aa8c42016-09-06 16:43:04 +0200482}
483function downgrade_from_7(){
tierno95a9e832017-04-27 18:49:37 +0200484 # echo " downgrade database from version 0.7 to version 0.6"
tiernof7aa8c42016-09-06 16:43:04 +0200485 echo " removing 'bind_net','bind_type','cidr','enable_dhcp' from 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100486 sql "ALTER TABLE nets CHANGE COLUMN provider bind NULL DEFAULT NULL AFTER vlan;"
487 sql "ALTER TABLE nets DROP COLUMN cidr, DROP COLUMN enable_dhcp, DROP COLUMN bind_net, DROP COLUMN bind_type, "\
488 "DROP COLUMN dhcp_first_ip, DROP COLUMN dhcp_last_ip;"
489 sql "DELETE FROM schema_version WHERE version_int = '7';"
tiernof7aa8c42016-09-06 16:43:04 +0200490}
garciadeblas24595392016-09-30 17:49:57 +0200491
492function upgrade_to_8(){
tierno95a9e832017-04-27 18:49:37 +0200493 # echo " upgrade database from version 0.7 to version 0.8"
garciadeblas24595392016-09-30 17:49:57 +0200494 echo " add column 'checksum' to 'images'"
tierno1b20f662017-11-16 16:37:58 +0100495 sql "ALTER TABLE images ADD COLUMN checksum VARCHAR(32) NULL AFTER name;"
496 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
497 "VALUES (8, '0.8', '0.4.10', 'add column checksum to images', '2016-09-30');"
garciadeblas24595392016-09-30 17:49:57 +0200498}
499function downgrade_from_8(){
tierno95a9e832017-04-27 18:49:37 +0200500 # echo " downgrade database from version 0.8 to version 0.7"
garciadeblas24595392016-09-30 17:49:57 +0200501 echo " remove column 'checksum' from 'images'"
tierno1b20f662017-11-16 16:37:58 +0100502 sql "ALTER TABLE images DROP COLUMN checksum;"
503 sql "DELETE FROM schema_version WHERE version_int = '8';"
garciadeblas24595392016-09-30 17:49:57 +0200504}
505
tierno181f1752017-02-01 16:28:11 +0100506function upgrade_to_9(){
tierno95a9e832017-04-27 18:49:37 +0200507 # echo " upgrade database from version 0.8 to version 0.9"
tierno1b20f662017-11-16 16:37:58 +0100508 echo " change length of columns 'path' and 'name' to 255 in table 'images', and change length of column "\
509 "'name' to 255 in table 'flavors'"
510 sql "ALTER TABLE images CHANGE COLUMN path path VARCHAR(255) NOT NULL AFTER uuid, CHANGE COLUMN name name "\
511 "VARCHAR(255) NOT NULL AFTER path;"
512 sql "ALTER TABLE flavors CHANGE COLUMN name name VARCHAR(255) NOT NULL AFTER uuid;"
513 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
514 "VALUES (9, '0.9', '0.5.1','increase length of columns path and name to 255 in table images, "\
515 "and change length of column name to 255 in table flavors', '2017-01-10');"
tierno181f1752017-02-01 16:28:11 +0100516}
517function downgrade_from_9(){
tierno95a9e832017-04-27 18:49:37 +0200518 # echo " downgrade database from version 0.9 to version 0.8"
garciadeblasf30a6772017-01-10 15:45:17 +0100519 echo " change length of columns 'path' and 'name' to 100 and 64 in table 'images'"
tierno1b20f662017-11-16 16:37:58 +0100520 sql "ALTER TABLE images CHANGE COLUMN path path VARCHAR(100) NOT NULL AFTER uuid, CHANGE COLUMN name name "\
521 "VARCHAR(64) NOT NULL AFTER path;"
522 sql "ALTER TABLE flavors CHANGE COLUMN name name VARCHAR(64) NOT NULL AFTER uuid;"
523 sql "DELETE FROM schema_version WHERE version_int = '9';"
garciadeblasf30a6772017-01-10 15:45:17 +0100524}
525
tiernoc1d1d472017-02-08 14:21:28 +0100526function upgrade_to_10(){
tierno95a9e832017-04-27 18:49:37 +0200527 # echo " upgrade database from version 0.9 to version 0.10"
tiernoc1d1d472017-02-08 14:21:28 +0100528 echo " change types at 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100529 sql "ALTER TABLE ports CHANGE COLUMN type type ENUM('instance:bridge','instance:data','external','instance:ovs',"\
530 "'controller:ovs') NOT NULL DEFAULT 'instance:bridge' AFTER status;"
531 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
532 "VALUES (10, '0.10', '0.5.2', 'change ports type, adding instance:ovs', '2017-02-01');"
tiernoc1d1d472017-02-08 14:21:28 +0100533}
534function downgrade_from_10(){
tierno95a9e832017-04-27 18:49:37 +0200535 # echo " downgrade database from version 0.10 to version 0.9"
tierno181f1752017-02-01 16:28:11 +0100536 echo " change back types at 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100537 sql "ALTER TABLE ports CHANGE COLUMN type type ENUM('instance:bridge','instance:data','external') "\
538 "NOT NULL DEFAULT 'instance:bridge' AFTER status;"
539 sql "DELETE FROM schema_version WHERE version_int = '10';"
tierno181f1752017-02-01 16:28:11 +0100540}
mirabal18f5de32017-02-13 12:41:49 +0100541
542function upgrade_to_11(){
tierno95a9e832017-04-27 18:49:37 +0200543 # echo " upgrade database from version 0.10 to version 0.11"
mirabal18f5de32017-02-13 12:41:49 +0100544 echo " Add gateway_ip colum to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100545 sql "ALTER TABLE nets ADD COLUMN gateway_ip VARCHAR(64) NULL DEFAULT NULL AFTER dhcp_last_ip;"
546 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
547 "VALUES (11, '0.11', '0.5.4', 'Add gateway_ip colum to nets', '2017-02-13');"
mirabal18f5de32017-02-13 12:41:49 +0100548}
549function downgrade_from_11(){
tierno95a9e832017-04-27 18:49:37 +0200550 # echo " downgrade database from version 0.11 to version 0.10"
mirabal18f5de32017-02-13 12:41:49 +0100551 echo " Delete gateway_ip colum from 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100552 sql "ALTER TABLE nets DROP COLUMN gateway_ip;"
553 sql "DELETE FROM schema_version WHERE version_int = '11';"
mirabal18f5de32017-02-13 12:41:49 +0100554}
mirabal9e194592017-02-17 11:03:25 +0100555function upgrade_to_12(){
tierno95a9e832017-04-27 18:49:37 +0200556 # echo " upgrade database from version 0.11 to version 0.12"
mirabal9e194592017-02-17 11:03:25 +0100557 echo " Create of_controller table "
tierno1b20f662017-11-16 16:37:58 +0100558 sql "CREATE TABLE ofcs (
559 uuid VARCHAR(36) NOT NULL,
560 name VARCHAR(255) NOT NULL,
561 dpid VARCHAR(64) NOT NULL,
562 ip VARCHAR(64) NOT NULL,
563 port INT(5) NOT NULL,
564 type VARCHAR(64) NOT NULL,
565 version VARCHAR(12) NULL DEFAULT NULL,
566 user VARCHAR(64) NULL DEFAULT NULL,
567 password VARCHAR(64) NULL DEFAULT NULL,
568 PRIMARY KEY (uuid)
569 )
570 COLLATE='utf8_general_ci'
571 ENGINE=InnoDB;"
mirabal9e194592017-02-17 11:03:25 +0100572 echo " Modify user_at for uuids table"
tierno1b20f662017-11-16 16:37:58 +0100573 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at VARCHAR(64) NULL DEFAULT NULL "\
574 "COMMENT 'Table that uses this UUID' ;"
575 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
576 "VALUES (12, '0.12', '0.5.5', 'Add of_controller table', '2017-02-17');"
mirabal9e194592017-02-17 11:03:25 +0100577}
578
579function downgrade_from_12(){
tierno95a9e832017-04-27 18:49:37 +0200580 # echo " downgrade database from version 0.12 to version 0.11"
mirabal9e194592017-02-17 11:03:25 +0100581 echo " Delete ofcs table"
tierno1b20f662017-11-16 16:37:58 +0100582 sql "DROP TABLE ofcs;"
583 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at ENUM('flavors', 'hosts', 'images', 'instances', "\
584 "'nets', 'ports', 'tenants') NULL DEFAULT NULL COMMENT 'Table that uses this UUID' ;"
585 sql "DELETE FROM schema_version WHERE version_int = '12';"
mirabal9e194592017-02-17 11:03:25 +0100586}
mirabal37829452017-03-09 14:41:21 +0100587
mirabal6045a9d2017-03-06 11:36:55 +0100588function upgrade_to_13(){
tierno95a9e832017-04-27 18:49:37 +0200589 # echo " upgrade database from version 0.12 to version 0.13"
mirabal6045a9d2017-03-06 11:36:55 +0100590 echo " Create of_port_mapings table "
tierno1b20f662017-11-16 16:37:58 +0100591 sql "CREATE TABLE of_port_mappings (
592 uuid VARCHAR(36) NOT NULL,
593 ofc_id VARCHAR(36) NULL DEFAULT NULL,
594 region VARCHAR(64) NULL DEFAULT NULL,
595 compute_node VARCHAR(64) NULL DEFAULT NULL,
596 pci VARCHAR(50) NULL DEFAULT NULL,
597 switch_dpid VARCHAR(64) NULL DEFAULT NULL,
598 switch_port VARCHAR(64) NULL DEFAULT NULL,
599 switch_mac CHAR(18) NULL DEFAULT NULL,
600 UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port),
601 UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac),
602 UNIQUE INDEX region_compute_node_pci (region, compute_node, pci),
603 INDEX FK_of_port_mappings_ofcs (ofc_id),
604 CONSTRAINT FK_of_port_mappings_ofcs FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid) ON UPDATE CASCADE
605 ON DELETE CASCADE)
606 COLLATE='utf8_general_ci'
607 ENGINE=InnoDB;"
608 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
609 "VALUES (13, '0.13', '0.5.6', 'Add of_port_mapings table', '2017-03-09');"
mirabal6045a9d2017-03-06 11:36:55 +0100610}
611
612function downgrade_from_13(){
tierno95a9e832017-04-27 18:49:37 +0200613 # echo " downgrade database from version 0.13 to version 0.12"
mirabal6045a9d2017-03-06 11:36:55 +0100614 echo " Delete of_port_mappings table"
tierno1b20f662017-11-16 16:37:58 +0100615 sql "DROP TABLE of_port_mappings;"
616 sql "DELETE FROM schema_version WHERE version_int = '13';"
mirabal6045a9d2017-03-06 11:36:55 +0100617}
mirabal37829452017-03-09 14:41:21 +0100618
619function upgrade_to_14(){
tierno95a9e832017-04-27 18:49:37 +0200620 # echo " upgrade database from version 0.13 to version 0.14"
mirabal37829452017-03-09 14:41:21 +0100621 echo " Add switch_mac, ofc_id colum to 'ports' and 'resources_port'"
tierno1b20f662017-11-16 16:37:58 +0100622 sql "ALTER TABLE ports
623 ADD COLUMN switch_mac VARCHAR(18) NULL DEFAULT NULL AFTER switch_port,
624 ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER switch_dpid,
625 ADD CONSTRAINT FK_port_ofc_id FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid);"
626 sql "ALTER TABLE resources_port
627 ADD COLUMN switch_mac VARCHAR(18) NULL DEFAULT NULL AFTER switch_port,
628 ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER switch_dpid,
629 ADD CONSTRAINT FK_resource_ofc_id FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid);"
630 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
631 "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 +0100632}
633
634function downgrade_from_14(){
tierno95a9e832017-04-27 18:49:37 +0200635 # echo " downgrade database from version 0.14 to version 0.13"
mirabal37829452017-03-09 14:41:21 +0100636 echo " Delete switch_mac, ofc_id colum to 'ports'"
tierno1b20f662017-11-16 16:37:58 +0100637 sql "ALTER TABLE ports DROP COLUMN switch_mac, DROP COLUMN ofc_id, DROP FOREIGN KEY FK_port_ofc_id;"
638 sql "ALTER TABLE resources_port DROP COLUMN switch_mac, DROP COLUMN ofc_id, DROP FOREIGN KEY FK_resource_ofc_id;"
639 sql "DELETE FROM schema_version WHERE version_int = '14';"
mirabal37829452017-03-09 14:41:21 +0100640}
641
mirabalf9a1a8d2017-03-15 12:42:27 +0100642function upgrade_to_15(){
tierno95a9e832017-04-27 18:49:37 +0200643 # echo " upgrade database from version 0.14 to version 0.15"
mirabalf9a1a8d2017-03-15 12:42:27 +0100644 echo " Add ofc_id colum to 'of_flows'"
tierno1b20f662017-11-16 16:37:58 +0100645 sql "ALTER TABLE of_flows ADD COLUMN ofc_id VARCHAR(36) NULL DEFAULT NULL AFTER net_id, ADD CONSTRAINT "\
646 "FK_of_flows_ofcs FOREIGN KEY (ofc_id) REFERENCES ofcs (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
647 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
648 "VALUES (15, '0.15', '0.5.8', 'Add ofc_id colum to of_flows', '2017-03-15');"
mirabalf9a1a8d2017-03-15 12:42:27 +0100649}
650
651function downgrade_from_15(){
tierno95a9e832017-04-27 18:49:37 +0200652 # echo " downgrade database from version 0.15 to version 0.14"
mirabalf9a1a8d2017-03-15 12:42:27 +0100653 echo " Delete ofc_id to 'of_flows'"
tierno1b20f662017-11-16 16:37:58 +0100654 sql "ALTER TABLE of_flows DROP COLUMN ofc_id, DROP FOREIGN KEY FK_of_flows_ofcs;"
655 sql "DELETE FROM schema_version WHERE version_int = '15';"
mirabalf9a1a8d2017-03-15 12:42:27 +0100656}
657
mirabal6c600652017-03-16 17:22:57 +0100658
659function upgrade_to_16(){
tierno95a9e832017-04-27 18:49:37 +0200660 # echo " upgrade database from version 0.15 to version 0.16"
mirabal6c600652017-03-16 17:22:57 +0100661 echo " Add last_error and status colum to 'ofcs'"
tierno1b20f662017-11-16 16:37:58 +0100662 sql "ALTER TABLE ofcs ADD COLUMN last_error VARCHAR(255) NULL DEFAULT NULL AFTER password, "\
663 "ADD COLUMN status ENUM('ACTIVE','INACTIVE','ERROR') NULL DEFAULT 'ACTIVE' AFTER last_error;"
664 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
665 "VALUES (16, '0.16', '0.5.9', 'Add last_error and status colum to ofcs', '2017-03-17');"
mirabal6c600652017-03-16 17:22:57 +0100666}
667
668function downgrade_from_16(){
tierno95a9e832017-04-27 18:49:37 +0200669 # echo " downgrade database from version 0.16 to version 0.15"
mirabal6c600652017-03-16 17:22:57 +0100670 echo " Delete last_error and status colum to 'ofcs'"
tierno1b20f662017-11-16 16:37:58 +0100671 sql "ALTER TABLE ofcs DROP COLUMN last_error, DROP COLUMN status;"
672 sql "DELETE FROM schema_version WHERE version_int = '16';"
mirabal6c600652017-03-16 17:22:57 +0100673}
tierno46ca3a92017-04-05 19:49:24 +0200674
675function upgrade_to_17(){
tierno95a9e832017-04-27 18:49:37 +0200676 # echo " upgrade database from version 0.16 to version 0.17"
tierno46ca3a92017-04-05 19:49:24 +0200677 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 +0100678 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_port, "\
679 "ADD UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port, pci);"
680 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_mac, "\
681 "ADD UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac, pci);"
tierno46ca3a92017-04-05 19:49:24 +0200682 echo " Add nets_with_same_vlan to table ofcs"
tierno1b20f662017-11-16 16:37:58 +0100683 sql "ALTER TABLE ofcs ADD COLUMN nets_with_same_vlan ENUM('true','false') NOT NULL DEFAULT 'false' AFTER status;"
684 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
685 "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 +0200686}
687
688function downgrade_from_17(){
tierno95a9e832017-04-27 18:49:37 +0200689 # echo " downgrade database from version 0.17 to version 0.16"
tierno46ca3a92017-04-05 19:49:24 +0200690 echo " Delete pci fromthe unique indexes switch_dpid_switch_port switch_dpid_switch_mac at of_port_mappings"
tierno1b20f662017-11-16 16:37:58 +0100691 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_port, "\
692 "ADD UNIQUE INDEX switch_dpid_switch_port (switch_dpid, switch_port);"
693 sql "ALTER TABLE of_port_mappings DROP INDEX switch_dpid_switch_mac, "\
694 "ADD UNIQUE INDEX switch_dpid_switch_mac (switch_dpid, switch_mac);"
tierno46ca3a92017-04-05 19:49:24 +0200695 echo " Remove nets_with_same_vlan from table ofcs"
tierno1b20f662017-11-16 16:37:58 +0100696 sql "ALTER TABLE ofcs DROP COLUMN nets_with_same_vlan;"
697 sql "DELETE FROM schema_version WHERE version_int = '17';"
tierno46ca3a92017-04-05 19:49:24 +0200698}
699
tiernoa290d8f2017-05-03 17:42:52 +0200700function upgrade_to_18(){
701 echo " Add 'region' at 'nets' and change unique index vlan+region"
tierno1b20f662017-11-16 16:37:58 +0100702 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 +0200703 echo " Fill 'region' with __OVS__/__DATA__ for OVS/openflow provider at nets"
tierno1b20f662017-11-16 16:37:58 +0100704 sql "UPDATE nets set region='__OVS__' where provider like 'OVS%';"
705 sql "UPDATE nets set region='__DATA__' where type='data' or type='ptp';"
tiernoa290d8f2017-05-03 17:42:52 +0200706 echo " Create new index region_vlan at nets"
tierno1b20f662017-11-16 16:37:58 +0100707 sql "ALTER TABLE nets ADD UNIQUE INDEX region_vlan (region, vlan);"
708 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
709 "VALUES (18, '0.18', '0.5.13', 'Add region to nets, change vlan unique index', '2017-05-03');"
tiernoa290d8f2017-05-03 17:42:52 +0200710}
711
712function downgrade_from_18(){
713 echo " Delete 'region' at 'nets' and change back unique index vlan+type"
tierno1b20f662017-11-16 16:37:58 +0100714 sql "ALTER TABLE nets DROP INDEX region_vlan, DROP COLUMN region;"
tiernoa290d8f2017-05-03 17:42:52 +0200715 echo " Create back index type_vlan at nets"
tierno1b20f662017-11-16 16:37:58 +0100716 sql "ALTER TABLE nets ADD UNIQUE INDEX type_vlan (type, vlan);"
717 sql "DELETE FROM schema_version WHERE version_int = '18';"
tiernoa290d8f2017-05-03 17:42:52 +0200718}
719
tiernoa6933042017-05-24 16:54:33 +0200720function upgrade_to_19(){
721 echo " Add 'keyfile' to 'hosts'"
tierno1b20f662017-11-16 16:37:58 +0100722 sql "ALTER TABLE hosts ADD COLUMN keyfile VARCHAR(255) NULL DEFAULT NULL AFTER password;"
723 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
724 "VALUES (19, '0.19', '0.5.15', 'Add keyfile to hosts', '2017-05-23');"
tiernoa6933042017-05-24 16:54:33 +0200725}
726
727function downgrade_from_19(){
728 echo " Delete 'keyfile' from 'hosts'"
tierno1b20f662017-11-16 16:37:58 +0100729 sql "ALTER TABLE hosts DROP COLUMN keyfile;"
730 sql "DELETE FROM schema_version WHERE version_int = '19';"
tiernoa6933042017-05-24 16:54:33 +0200731}
732
mirabalcaeb2242017-05-31 10:52:22 -0500733function upgrade_to_20(){
734 echo " Add 'image_size' to 'instance_devices'"
tierno1b20f662017-11-16 16:37:58 +0100735 sql "ALTER TABLE instance_devices ADD COLUMN image_size INT NULL DEFAULT NULL AFTER dev;"
736 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
737 "VALUES (20, '0.20', '0.5.17', 'Add image_size to instance_devices', '2017-06-01');"
mirabalcaeb2242017-05-31 10:52:22 -0500738}
739
740function downgrade_from_20(){
741 echo " Delete 'image_size' from 'instance_devices'"
tierno1b20f662017-11-16 16:37:58 +0100742 sql "ALTER TABLE instance_devices DROP COLUMN image_size;"
743 sql "DELETE FROM schema_version WHERE version_int = '20';"
mirabalcaeb2242017-05-31 10:52:22 -0500744}
tiernoa6933042017-05-24 16:54:33 +0200745
mirabal6878e3f2017-06-05 09:19:26 -0500746function upgrade_to_21(){
747 echo " Add 'routes', 'links' and 'dns' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100748 sql "ALTER TABLE nets ADD COLUMN dns VARCHAR(255) NULL AFTER gateway_ip, "\
749 "ADD COLUMN links TEXT(2000) NULL AFTER dns, "\
750 "ADD COLUMN routes TEXT(2000) NULL AFTER links;"
751 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
752 "VALUES (21, '0.21', '0.5.18', 'Add routes, links and dns to inets', '2017-06-21');"
mirabal6878e3f2017-06-05 09:19:26 -0500753}
754
755function downgrade_from_21(){
756 echo " Delete 'routes', 'links' and 'dns' to 'nets'"
tierno1b20f662017-11-16 16:37:58 +0100757 sql "ALTER TABLE nets DROP COLUMN dns, DROP COLUMN links, DROP COLUMN routes;"
758 sql "DELETE FROM schema_version WHERE version_int = '21';"
mirabal6878e3f2017-06-05 09:19:26 -0500759}
760
garciadeblas259459f2017-11-14 16:27:31 +0100761function upgrade_to_22(){
762 echo " Changed type of ram in 'flavors' from SMALLINT to MEDIUMINT"
tierno1b20f662017-11-16 16:37:58 +0100763 sql "ALTER TABLE flavors CHANGE COLUMN ram ram MEDIUMINT(7) UNSIGNED NULL DEFAULT NULL AFTER disk;"
764 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
765 "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 +0100766}
767
768function downgrade_from_22(){
769 echo " Changed type of ram in 'flavors' from MEDIUMINT to SMALLINT"
tierno1b20f662017-11-16 16:37:58 +0100770 sql "ALTER TABLE flavors CHANGE COLUMN ram ram SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER disk;"
771 sql "DELETE FROM schema_version WHERE version_int = '22';"
garciadeblas259459f2017-11-14 16:27:31 +0100772}
773
Paolo Lungaroni423a4082018-02-14 18:05:02 +0100774function upgrade_to_23(){
775 echo " Add 'hypervisor' and 'os_type' column to 'instances' table"
776 sql "ALTER TABLE instances ADD COLUMN hypervisor enum('kvm','xen-unik','xenhvm') NOT NULL DEFAULT 'kvm' AFTER flavor_id;"
777 sql "ALTER TABLE instances ADD COLUMN os_image_type VARCHAR(24) NOT NULL DEFAULT 'other' AFTER hypervisor;"
778 echo " Add 'hypervisors' column to 'hosts' table"
779 sql "ALTER TABLE hosts ADD COLUMN hypervisors VARCHAR(255) NOT NULL DEFAULT 'kvm' AFTER features;"
780 sql "INSERT INTO schema_version (version_int, version, openvim_ver, comments, date) "\
781 "VALUES (23, '0.23', '0.5.24', 'Add hypervisor, os_type to instances and add hypervisors to hosts', '2018-03-20');"
782}
783
784function downgrade_from_23(){
785 echo " Remove 'hypervisor' and 'os_type' column from 'instances' table"
786 sql "ALTER TABLE instances DROP COLUMN hypervisor;"
787 sql "ALTER TABLE instances DROP COLUMN os_image_type;"
788 echo " Remove 'hypervisors' column from 'hosts' table"
789 sql "ALTER TABLE hosts DROP COLUMN hypervisors;"
790 sql "DELETE FROM schema_version WHERE version_int = '23';"
791}
792
tierno1b20f662017-11-16 16:37:58 +0100793# TODO ... put functions here
tiernof7aa8c42016-09-06 16:43:04 +0200794
tierno95a9e832017-04-27 18:49:37 +0200795# echo "db version = "${DATABASE_VER_NUM}
tierno1b20f662017-11-16 16:37:58 +0100796[ $DB_VERSION -eq $DATABASE_VER_NUM ] && echo " current database version '$DATABASE_VER_NUM' is ok" && exit 0
797
798# Create a backup database content
799TEMPFILE2="$(mktemp -q --tmpdir "backupdb.XXXXXX.sql")"
800trap 'rm -f "$TEMPFILE2"' EXIT
801mysqldump $DEF_EXTRA_FILE_PARAM --add-drop-table --add-drop-database --routines --databases $DBNAME > $TEMPFILE2
802
803function rollback_db()
804{
805 cat $TEMPFILE2 | mysql $DEF_EXTRA_FILE_PARAM && echo " Aborted! Rollback database OK" ||
806 echo " Aborted! Rollback database FAIL"
807 exit 1
808}
809
810function sql() # send a sql command
811{
812 echo "$*" | $DBCMD || ! echo " ERROR with command '$*'" || rollback_db
813 return 0
814}
815
tiernof7aa8c42016-09-06 16:43:04 +0200816#UPGRADE DATABASE step by step
tierno95a9e832017-04-27 18:49:37 +0200817while [ $DB_VERSION -gt $DATABASE_VER_NUM ]
tiernof7aa8c42016-09-06 16:43:04 +0200818do
tierno95a9e832017-04-27 18:49:37 +0200819 echo " upgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM+1))'"
tiernof7aa8c42016-09-06 16:43:04 +0200820 DATABASE_VER_NUM=$((DATABASE_VER_NUM+1))
tiernof7aa8c42016-09-06 16:43:04 +0200821 upgrade_to_${DATABASE_VER_NUM}
822 #FILE_="${DIRNAME}/upgrade_to_${DATABASE_VER_NUM}.sh"
823 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to upgrade" >&2 && exit -1
824 #$FILE_ || exit -1 # if fail return
825done
826
827#DOWNGRADE DATABASE step by step
tierno95a9e832017-04-27 18:49:37 +0200828while [ $DB_VERSION -lt $DATABASE_VER_NUM ]
tiernof7aa8c42016-09-06 16:43:04 +0200829do
tierno95a9e832017-04-27 18:49:37 +0200830 echo " downgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM-1))'"
tiernof7aa8c42016-09-06 16:43:04 +0200831 #FILE_="${DIRNAME}/downgrade_from_${DATABASE_VER_NUM}.sh"
832 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to downgrade" >&2 && exit -1
833 #$FILE_ || exit -1 # if fail return
834 downgrade_from_${DATABASE_VER_NUM}
835 DATABASE_VER_NUM=$((DATABASE_VER_NUM-1))
836done
837
838#echo done
839