Feature 1413 resiliency to single component failure
[osm/RO.git] / database_utils / migrate_mano_db.sh
1 #!/bin/bash
2
3 ##
4 # Copyright 2015 Telefónica Investigación y Desarrollo, S.A.U.
5 # This file is part of openmano
6 # 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 openmano database preserving the content
26 #
27
28 DBUSER="mano"
29 DBPASS=""
30 DEFAULT_DBPASS="manopw"
31 DBHOST=""
32 DBPORT="3306"
33 DBNAME="mano_db"
34 QUIET_MODE=""
35 #TODO update it with the last database version
36 LAST_DB_VERSION=26
37
38 # Detect paths
39 MYSQL=$(which mysql)
40 AWK=$(which awk)
41 GREP=$(which grep)
42
43 function usage(){
44 echo -e "Usage: $0 OPTIONS [version]"
45 echo -e " Upgrades/Downgrades openmano database preserving the content."\
46 "If [version] is not provided, it is upgraded to the last version"
47 echo -e " OPTIONS"
48 echo -e " -u USER database user. '$DBUSER' by default. Prompts if DB access fails"
49 echo -e " -p PASS database password. If missing it tries without and '$DEFAULT_DBPASS' password before prompting"
50 echo -e " -P PORT database port. '$DBPORT' by default"
51 echo -e " -h HOST database host. 'localhost' by default"
52 echo -e " -d NAME database name. '$DBNAME' by default. Prompts if DB access fails"
53 echo -e " -q --quiet: Do not prompt for credentials and exit if cannot access to database"
54 echo -e " --help shows this help"
55 }
56
57 while getopts ":u:p:P:h:d:q-:" o; do
58 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 ;;
74 q)
75 export QUIET_MODE=yes
76 ;;
77 -)
78 [ "${OPTARG}" == "help" ] && usage && exit 0
79 [ "${OPTARG}" == "quiet" ] && export QUIET_MODE=yes && continue
80 echo "Invalid option: '--$OPTARG'. Type --help for more information" >&2
81 exit 1
82 ;;
83 \?)
84 echo "Invalid option: '-$OPTARG'. Type --help for more information" >&2
85 exit 1
86 ;;
87 :)
88 echo "Option '-$OPTARG' requires an argument. Type --help for more information" >&2
89 exit 1
90 ;;
91 *)
92 usage >&2
93 exit 1
94 ;;
95 esac
96 done
97 shift $((OPTIND-1))
98
99 DB_VERSION=$1
100
101 if [ -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
110 else
111 DB_VERSION="$LAST_DB_VERSION"
112 fi
113
114 # Creating temporary file
115 TEMPFILE="$(mktemp -q --tmpdir "migratemanodb.XXXXXX")"
116 trap 'rm -f "$TEMPFILE"' EXIT
117 chmod 0600 "$TEMPFILE"
118 DEF_EXTRA_FILE_PARAM="--defaults-extra-file=$TEMPFILE"
119 echo -e "[client]\n user='${DBUSER}'\n password='$DBPASS'\n host='$DBHOST'\n port='$DBPORT'" > "$TEMPFILE"
120
121 # Check and ask for database user password
122 FIRST_TRY="yes"
123 while ! DB_ERROR=`mysql "$DEF_EXTRA_FILE_PARAM" $DBNAME -e "quit" 2>&1 >/dev/null`
124 do
125 # 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
140 done
141
142 DBCMD="mysql $DEF_EXTRA_FILE_PARAM $DBNAME"
143 #echo DBCMD $DBCMD
144
145 #GET DATABASE VERSION
146 #check that the database seems a openmano database
147 if ! echo -e "show create table vnfs;\nshow create table scenarios" | $DBCMD >/dev/null 2>&1
148 then
149 echo " database $DBNAME does not seem to be an openmano database" >&2
150 exit 1;
151 fi
152
153 if ! echo 'show create table schema_version;' | $DBCMD >/dev/null 2>&1
154 then
155 DATABASE_VER="0.0"
156 DATABASE_VER_NUM=0
157 else
158 DATABASE_VER_NUM=`echo "select max(version_int) from schema_version;" | $DBCMD | tail -n+2`
159 DATABASE_VER=`echo "select version from schema_version where version_int='$DATABASE_VER_NUM';" | $DBCMD | tail -n+2`
160 [ "$DATABASE_VER_NUM" -lt 0 -o "$DATABASE_VER_NUM" -gt 100 ] &&
161 echo " Error can not get database version ($DATABASE_VER?)" >&2 && exit 1
162 #echo "_${DATABASE_VER_NUM}_${DATABASE_VER}"
163 fi
164
165 [ "$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
168
169 #GET DATABASE TARGET VERSION
170 #DB_VERSION=0
171 #[ $OPENMANO_VER_NUM -ge 2002 ] && DB_VERSION=1 #0.2.2 => 1
172 #[ $OPENMANO_VER_NUM -ge 2005 ] && DB_VERSION=2 #0.2.5 => 2
173 #[ $OPENMANO_VER_NUM -ge 3003 ] && DB_VERSION=3 #0.3.3 => 3
174 #[ $OPENMANO_VER_NUM -ge 3005 ] && DB_VERSION=4 #0.3.5 => 4
175 #[ $OPENMANO_VER_NUM -ge 4001 ] && DB_VERSION=5 #0.4.1 => 5
176 #[ $OPENMANO_VER_NUM -ge 4002 ] && DB_VERSION=6 #0.4.2 => 6
177 #[ $OPENMANO_VER_NUM -ge 4003 ] && DB_VERSION=7 #0.4.3 => 7
178 #[ $OPENMANO_VER_NUM -ge 4032 ] && DB_VERSION=8 #0.4.32=> 8
179 #[ $OPENMANO_VER_NUM -ge 4033 ] && DB_VERSION=9 #0.4.33=> 9
180 #[ $OPENMANO_VER_NUM -ge 4036 ] && DB_VERSION=10 #0.4.36=> 10
181 #[ $OPENMANO_VER_NUM -ge 4043 ] && DB_VERSION=11 #0.4.43=> 11
182 #[ $OPENMANO_VER_NUM -ge 4046 ] && DB_VERSION=12 #0.4.46=> 12
183 #[ $OPENMANO_VER_NUM -ge 4047 ] && DB_VERSION=13 #0.4.47=> 13
184 #[ $OPENMANO_VER_NUM -ge 4057 ] && DB_VERSION=14 #0.4.57=> 14
185 #[ $OPENMANO_VER_NUM -ge 4059 ] && DB_VERSION=15 #0.4.59=> 15
186 #[ $OPENMANO_VER_NUM -ge 5002 ] && DB_VERSION=16 #0.5.2 => 16
187 #[ $OPENMANO_VER_NUM -ge 5003 ] && DB_VERSION=17 #0.5.3 => 17
188 #[ $OPENMANO_VER_NUM -ge 5004 ] && DB_VERSION=18 #0.5.4 => 18
189 #[ $OPENMANO_VER_NUM -ge 5005 ] && DB_VERSION=19 #0.5.5 => 19
190 #[ $OPENMANO_VER_NUM -ge 5009 ] && DB_VERSION=20 #0.5.9 => 20
191 #[ $OPENMANO_VER_NUM -ge 5015 ] && DB_VERSION=21 #0.5.15 => 21
192 #[ $OPENMANO_VER_NUM -ge 5016 ] && DB_VERSION=22 #0.5.16 => 22
193 #[ $OPENMANO_VER_NUM -ge 5020 ] && DB_VERSION=23 #0.5.20 => 23
194 #[ $OPENMANO_VER_NUM -ge 5021 ] && DB_VERSION=24 #0.5.21 => 24
195 #[ $OPENMANO_VER_NUM -ge 5022 ] && DB_VERSION=25 #0.5.22 => 25
196 #[ $OPENMANO_VER_NUM -ge 5024 ] && DB_VERSION=26 #0.5.24 => 26
197 #TODO ... put next versions here
198
199 function upgrade_to_1(){
200 # echo " upgrade database from version 0.0 to version 0.1"
201 echo " CREATE TABLE \`schema_version\`"
202 sql "CREATE TABLE \`schema_version\` (
203 \`version_int\` INT NOT NULL COMMENT 'version as a number. Must not contain gaps',
204 \`version\` VARCHAR(20) NOT NULL COMMENT 'version as a text',
205 \`openmano_ver\` VARCHAR(20) NOT NULL COMMENT 'openmano version',
206 \`comments\` VARCHAR(2000) NULL COMMENT 'changes to database',
207 \`date\` DATE NULL,
208 PRIMARY KEY (\`version_int\`)
209 )
210 COMMENT='database schema control version'
211 COLLATE='utf8_general_ci'
212 ENGINE=InnoDB;"
213 sql "INSERT INTO \`schema_version\` (\`version_int\`, \`version\`, \`openmano_ver\`, \`comments\`, \`date\`)
214 VALUES (1, '0.1', '0.2.2', 'insert schema_version', '2015-05-08');"
215 }
216 function downgrade_from_1(){
217 # echo " downgrade database from version 0.1 to version 0.0"
218 echo " DROP TABLE \`schema_version\`"
219 sql "DROP TABLE \`schema_version\`;"
220 }
221 function upgrade_to_2(){
222 # echo " upgrade database from version 0.1 to version 0.2"
223 echo " Add columns user/passwd to table 'vim_tenants'"
224 sql "ALTER TABLE vim_tenants ADD COLUMN user VARCHAR(36) NULL COMMENT 'Credentials for vim' AFTER created,
225 ADD COLUMN passwd VARCHAR(50) NULL COMMENT 'Credentials for vim' AFTER user;"
226 echo " Add table 'images' and 'datacenters_images'"
227 sql "CREATE TABLE images (
228 uuid VARCHAR(36) NOT NULL,
229 name VARCHAR(50) NOT NULL,
230 location VARCHAR(200) NOT NULL,
231 description VARCHAR(100) NULL,
232 metadata VARCHAR(400) NULL,
233 PRIMARY KEY (uuid),
234 UNIQUE INDEX location (location) )
235 COLLATE='utf8_general_ci'
236 ENGINE=InnoDB;"
237 sql "CREATE TABLE datacenters_images (
238 id INT NOT NULL AUTO_INCREMENT,
239 image_id VARCHAR(36) NOT NULL,
240 datacenter_id VARCHAR(36) NOT NULL,
241 vim_id VARCHAR(36) NOT NULL,
242 PRIMARY KEY (id),
243 CONSTRAINT FK__images FOREIGN KEY (image_id) REFERENCES images (uuid) ON UPDATE CASCADE ON DELETE CASCADE,
244 CONSTRAINT FK__datacenters_i FOREIGN KEY (datacenter_id) REFERENCES datacenters (uuid) ON UPDATE CASCADE ON DELETE CASCADE )
245 COLLATE='utf8_general_ci'
246 ENGINE=InnoDB;"
247 echo " migrate data from table 'vms' into 'images'"
248 sql "INSERT INTO images (uuid, name, location) SELECT DISTINCT vim_image_id, vim_image_id, image_path FROM vms;"
249 sql "INSERT INTO datacenters_images (image_id, datacenter_id, vim_id)
250 SELECT DISTINCT vim_image_id, datacenters.uuid, vim_image_id FROM vms JOIN datacenters;"
251 echo " Add table 'flavors' and 'datacenter_flavors'"
252 sql "CREATE TABLE flavors (
253 uuid VARCHAR(36) NOT NULL,
254 name VARCHAR(50) NOT NULL,
255 description VARCHAR(100) NULL,
256 disk SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
257 ram SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
258 vcpus SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
259 extended VARCHAR(2000) NULL DEFAULT NULL COMMENT 'Extra description json format of needed resources and pining, orginized in sets per numa',
260 PRIMARY KEY (uuid) )
261 COLLATE='utf8_general_ci'
262 ENGINE=InnoDB;"
263 sql "CREATE TABLE datacenters_flavors (
264 id INT NOT NULL AUTO_INCREMENT,
265 flavor_id VARCHAR(36) NOT NULL,
266 datacenter_id VARCHAR(36) NOT NULL,
267 vim_id VARCHAR(36) NOT NULL,
268 PRIMARY KEY (id),
269 CONSTRAINT FK__flavors FOREIGN KEY (flavor_id) REFERENCES flavors (uuid) ON UPDATE CASCADE ON DELETE CASCADE,
270 CONSTRAINT FK__datacenters_f FOREIGN KEY (datacenter_id) REFERENCES datacenters (uuid) ON UPDATE CASCADE ON DELETE CASCADE )
271 COLLATE='utf8_general_ci'
272 ENGINE=InnoDB;"
273 echo " migrate data from table 'vms' into 'flavors'"
274 sql "INSERT INTO flavors (uuid, name) SELECT DISTINCT vim_flavor_id, vim_flavor_id FROM vms;"
275 sql "INSERT INTO datacenters_flavors (flavor_id, datacenter_id, vim_id)
276 SELECT DISTINCT vim_flavor_id, datacenters.uuid, vim_flavor_id FROM vms JOIN datacenters;"
277 sql "ALTER TABLE vms ALTER vim_flavor_id DROP DEFAULT, ALTER vim_image_id DROP DEFAULT;
278 ALTER TABLE vms CHANGE COLUMN vim_flavor_id flavor_id VARCHAR(36) NOT NULL COMMENT 'Link to flavor table' AFTER vnf_id,
279 CHANGE COLUMN vim_image_id image_id VARCHAR(36) NOT NULL COMMENT 'Link to image table' AFTER flavor_id,
280 ADD CONSTRAINT FK_vms_images FOREIGN KEY (image_id) REFERENCES images (uuid),
281 ADD CONSTRAINT FK_vms_flavors FOREIGN KEY (flavor_id) REFERENCES flavors (uuid);"
282 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (2, '0.2', '0.2.5', 'new tables images,flavors', '2015-07-13');"
283
284 }
285
286 function downgrade_from_2(){
287 # echo " downgrade database from version 0.2 to version 0.1"
288 echo " migrate back data from 'datacenters_images' 'datacenters_flavors' into 'vms'"
289 sql "ALTER TABLE vms ALTER image_id DROP DEFAULT, ALTER flavor_id DROP DEFAULT;
290 ALTER TABLE vms CHANGE COLUMN flavor_id vim_flavor_id VARCHAR(36) NOT NULL COMMENT 'Flavor ID in the VIM DB' AFTER vnf_id,
291 CHANGE COLUMN image_id vim_image_id VARCHAR(36) NOT NULL COMMENT 'Image ID in the VIM DB' AFTER vim_flavor_id,
292 DROP FOREIGN KEY FK_vms_flavors, DROP INDEX FK_vms_flavors,
293 DROP FOREIGN KEY FK_vms_images, DROP INDEX FK_vms_images;"
294 # echo "UPDATE v SET v.vim_image_id=di.vim_id
295 # FROM vms as v INNER JOIN images as i ON v.vim_image_id=i.uuid
296 # INNER JOIN datacenters_images as di ON i.uuid=di.image_id;"
297 echo " Delete columns 'user/passwd' from 'vim_tenants'"
298 sql "ALTER TABLE vim_tenants DROP COLUMN user, DROP COLUMN passwd; "
299 echo " delete tables 'datacenter_images', 'images'"
300 sql "DROP TABLE \`datacenters_images\`;"
301 sql "DROP TABLE \`images\`;"
302 echo " delete tables 'datacenter_flavors', 'flavors'"
303 sql "DROP TABLE \`datacenters_flavors\`;"
304 sql "DROP TABLE \`flavors\`;"
305 sql "DELETE FROM schema_version WHERE version_int='2';"
306 }
307
308 function upgrade_to_3(){
309 # echo " upgrade database from version 0.2 to version 0.3"
310 echo " Change table 'logs', 'uuids"
311 sql "ALTER TABLE logs CHANGE COLUMN related related VARCHAR(36) NOT NULL COMMENT 'Relevant element for the log' AFTER nfvo_tenant_id;"
312 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at VARCHAR(36) NULL DEFAULT NULL COMMENT 'Table that uses this UUID' AFTER created_at;"
313 echo " Add column created to table 'datacenters_images' and 'datacenters_flavors'"
314 for table in datacenters_images datacenters_flavors
315 do
316 sql "ALTER TABLE $table ADD COLUMN created ENUM('true','false') NOT NULL DEFAULT 'false'
317 COMMENT 'Indicates if it has been created by openmano, or already existed' AFTER vim_id;"
318 done
319 sql "ALTER TABLE images CHANGE COLUMN metadata metadata VARCHAR(2000) NULL DEFAULT NULL AFTER description;"
320 echo " Allow null to column 'vim_interface_id' in 'instance_interfaces'"
321 sql "ALTER TABLE instance_interfaces CHANGE COLUMN vim_interface_id vim_interface_id VARCHAR(36) NULL DEFAULT NULL COMMENT 'vim identity for that interface' AFTER interface_id; "
322 echo " Add column config to table 'datacenters'"
323 sql "ALTER TABLE datacenters ADD COLUMN config VARCHAR(4000) NULL DEFAULT NULL COMMENT 'extra config information in json' AFTER vim_url_admin;
324 "
325 echo " Add column datacenter_id to table 'vim_tenants'"
326 sql "ALTER TABLE vim_tenants ADD COLUMN datacenter_id VARCHAR(36) NULL COMMENT 'Datacenter of this tenant' AFTER uuid,
327 DROP INDEX name, DROP INDEX vim_tenant_id;"
328 sql "ALTER TABLE vim_tenants CHANGE COLUMN name vim_tenant_name VARCHAR(36) NULL DEFAULT NULL COMMENT 'tenant name at VIM' AFTER datacenter_id,
329 CHANGE COLUMN vim_tenant_id vim_tenant_id VARCHAR(36) NULL DEFAULT NULL COMMENT 'Tenant ID at VIM' AFTER vim_tenant_name;"
330 echo "UPDATE vim_tenants as vt LEFT JOIN tenants_datacenters as td ON vt.uuid=td.vim_tenant_id
331 SET vt.datacenter_id=td.datacenter_id;"
332 sql "DELETE FROM vim_tenants WHERE datacenter_id is NULL;"
333 sql "ALTER TABLE vim_tenants ALTER datacenter_id DROP DEFAULT;
334 ALTER TABLE vim_tenants
335 CHANGE COLUMN datacenter_id datacenter_id VARCHAR(36) NOT NULL COMMENT 'Datacenter of this tenant' AFTER uuid;"
336 sql "ALTER TABLE vim_tenants ADD CONSTRAINT FK_vim_tenants_datacenters FOREIGN KEY (datacenter_id) REFERENCES datacenters (uuid)
337 ON UPDATE CASCADE ON DELETE CASCADE;"
338
339 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (3, '0.3', '0.3.3', 'alter vim_tenant tables', '2015-07-28');"
340 }
341
342
343 function downgrade_from_3(){
344 # echo " downgrade database from version 0.3 to version 0.2"
345 echo " Change back table 'logs', 'uuids'"
346 sql "ALTER TABLE logs CHANGE COLUMN related related ENUM('nfvo_tenants','datacenters','vim_tenants','tenants_datacenters','vnfs','vms','interfaces','nets','scenarios','sce_vnfs','sce_interfaces','sce_nets','instance_scenarios','instance_vnfs','instance_vms','instance_nets','instance_interfaces') NOT NULL COMMENT 'Relevant element for the log' AFTER nfvo_tenant_id;"
347 sql "ALTER TABLE uuids CHANGE COLUMN used_at used_at ENUM('nfvo_tenants','datacenters','vim_tenants','vnfs','vms','interfaces','nets','scenarios','sce_vnfs','sce_interfaces','sce_nets','instance_scenarios','instance_vnfs','instance_vms','instance_nets','instance_interfaces') NULL DEFAULT NULL COMMENT 'Table that uses this UUID' AFTER created_at;"
348 echo " Delete column created from table 'datacenters_images' and 'datacenters_flavors'"
349 for table in datacenters_images datacenters_flavors
350 do
351 sql "ALTER TABLE $table DROP COLUMN created;"
352 done
353 sql "ALTER TABLE images CHANGE COLUMN metadata metadata VARCHAR(400) NULL DEFAULT NULL AFTER description;"
354 echo " Deny back null to column 'vim_interface_id' in 'instance_interfaces'"
355 sql "ALTER TABLE instance_interfaces CHANGE COLUMN vim_interface_id vim_interface_id VARCHAR(36) NOT NULL COMMENT 'vim identity for that interface' AFTER interface_id; "
356 echo " Delete column config to table 'datacenters'"
357 sql "ALTER TABLE datacenters DROP COLUMN config;"
358 echo " Delete column datacenter_id to table 'vim_tenants'"
359 sql "ALTER TABLE vim_tenants DROP COLUMN datacenter_id, DROP FOREIGN KEY FK_vim_tenants_datacenters;"
360 sql "ALTER TABLE vim_tenants CHANGE COLUMN vim_tenant_name name VARCHAR(36) NULL DEFAULT NULL COMMENT '' AFTER uuid"
361 sql "ALTER TABLE vim_tenants ALTER name DROP DEFAULT;"
362 sql "ALTER TABLE vim_tenants CHANGE COLUMN name name VARCHAR(36) NOT NULL AFTER uuid" || ! echo "Warning changing column name at vim_tenants!"
363 sql "ALTER TABLE vim_tenants ADD UNIQUE INDEX name (name);" || ! echo "Warning add unique index name at vim_tenants!"
364 sql "ALTER TABLE vim_tenants ALTER vim_tenant_id DROP DEFAULT;"
365 sql "ALTER TABLE vim_tenants CHANGE COLUMN vim_tenant_id vim_tenant_id VARCHAR(36) NOT NULL COMMENT 'Tenant ID in the VIM DB' AFTER name;" ||
366 ! echo "Warning changing column vim_tenant_id at vim_tenants!"
367 sql "ALTER TABLE vim_tenants ADD UNIQUE INDEX vim_tenant_id (vim_tenant_id);" ||
368 ! echo "Warning add unique index vim_tenant_id at vim_tenants!"
369 sql "DELETE FROM schema_version WHERE version_int='3';"
370 }
371
372 function upgrade_to_4(){
373 # echo " upgrade database from version 0.3 to version 0.4"
374 echo " Enlarge graph field at tables 'sce_vnfs', 'sce_nets'"
375 for table in sce_vnfs sce_nets
376 do
377 sql "ALTER TABLE $table CHANGE COLUMN graph graph VARCHAR(2000) NULL DEFAULT NULL AFTER modified_at;"
378 done
379 sql "ALTER TABLE datacenters CHANGE COLUMN type type VARCHAR(36) NOT NULL DEFAULT 'openvim' AFTER description;"
380 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (4, '0.4', '0.3.5', 'enlarge graph field at sce_vnfs/nets', '2015-10-20');"
381 }
382
383 function downgrade_from_4(){
384 # echo " downgrade database from version 0.4 to version 0.3"
385 echo " Shorten back graph field at tables 'sce_vnfs', 'sce_nets'"
386 for table in sce_vnfs sce_nets
387 do
388 sql "ALTER TABLE $table CHANGE COLUMN graph graph VARCHAR(2000) NULL DEFAULT NULL AFTER modified_at;"
389 done
390 sql "ALTER TABLE datacenters CHANGE COLUMN type type ENUM('openvim','openstack') NOT NULL DEFAULT 'openvim' AFTER description;"
391 sql "DELETE FROM schema_version WHERE version_int='4';"
392 }
393
394 function upgrade_to_5(){
395 # echo " upgrade database from version 0.4 to version 0.5"
396 echo " Add 'mac' field for bridge interfaces in table 'interfaces'"
397 sql "ALTER TABLE interfaces ADD COLUMN mac CHAR(18) NULL DEFAULT NULL AFTER model;"
398 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (5, '0.5', '0.4.1', 'Add mac address for bridge interfaces', '2015-12-14');"
399 }
400 function downgrade_from_5(){
401 # echo " downgrade database from version 0.5 to version 0.4"
402 echo " Remove 'mac' field for bridge interfaces in table 'interfaces'"
403 sql "ALTER TABLE interfaces DROP COLUMN mac;"
404 sql "DELETE FROM schema_version WHERE version_int='5';"
405 }
406
407 function upgrade_to_6(){
408 # echo " upgrade database from version 0.5 to version 0.6"
409 echo " Add 'descriptor' field text to 'vnfd', 'scenarios'"
410 sql "ALTER TABLE vnfs ADD COLUMN descriptor TEXT NULL DEFAULT NULL COMMENT 'Original text descriptor used for create the VNF' AFTER class;"
411 sql "ALTER TABLE scenarios ADD COLUMN descriptor TEXT NULL DEFAULT NULL COMMENT 'Original text descriptor used for create the scenario' AFTER modified_at;"
412 echo " Add 'last_error', 'vim_info' to 'instance_vms', 'instance_nets'"
413 sql "ALTER TABLE instance_vms ADD COLUMN error_msg VARCHAR(1024) NULL DEFAULT NULL AFTER status;"
414 sql "ALTER TABLE instance_vms ADD COLUMN vim_info TEXT NULL DEFAULT NULL AFTER error_msg;"
415 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE','INACTIVE','BUILD','ERROR','VIM_ERROR','PAUSED','SUSPENDED','DELETED') NOT NULL DEFAULT 'BUILD' AFTER vim_vm_id;"
416 sql "ALTER TABLE instance_nets ADD COLUMN error_msg VARCHAR(1024) NULL DEFAULT NULL AFTER status;"
417 sql "ALTER TABLE instance_nets ADD COLUMN vim_info TEXT NULL DEFAULT NULL AFTER error_msg;"
418 sql "ALTER TABLE instance_nets CHANGE COLUMN status status ENUM('ACTIVE','DOWN','BUILD','ERROR','VIM_ERROR','INACTIVE','DELETED') NOT NULL DEFAULT 'BUILD' AFTER instance_scenario_id;"
419 echo " Add 'mac_address', 'ip_address', 'vim_info' to 'instance_interfaces'"
420 sql "ALTER TABLE instance_interfaces ADD COLUMN mac_address VARCHAR(32) NULL DEFAULT NULL AFTER vim_interface_id, ADD COLUMN ip_address VARCHAR(64) NULL DEFAULT NULL AFTER mac_address, ADD COLUMN vim_info TEXT NULL DEFAULT NULL AFTER ip_address;"
421 echo " Add 'sce_vnf_id','datacenter_id','vim_tenant_id' field to 'instance_vnfs'"
422 sql "ALTER TABLE instance_vnfs ADD COLUMN sce_vnf_id VARCHAR(36) NULL DEFAULT NULL AFTER vnf_id, ADD CONSTRAINT FK_instance_vnfs_sce_vnfs FOREIGN KEY (sce_vnf_id) REFERENCES sce_vnfs (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
423 sql "ALTER TABLE instance_vnfs ADD COLUMN vim_tenant_id VARCHAR(36) NULL DEFAULT NULL AFTER sce_vnf_id, ADD CONSTRAINT FK_instance_vnfs_vim_tenants FOREIGN KEY (vim_tenant_id) REFERENCES vim_tenants (uuid) ON UPDATE RESTRICT ON DELETE RESTRICT;"
424 sql "ALTER TABLE instance_vnfs ADD COLUMN datacenter_id VARCHAR(36) NULL DEFAULT NULL AFTER vim_tenant_id, ADD CONSTRAINT FK_instance_vnfs_datacenters FOREIGN KEY (datacenter_id) REFERENCES datacenters (uuid) ON UPDATE RESTRICT ON DELETE RESTRICT;"
425 echo " Add 'sce_net_id','net_id','datacenter_id','vim_tenant_id' field to 'instance_nets'"
426 sql "ALTER TABLE instance_nets ADD COLUMN sce_net_id VARCHAR(36) NULL DEFAULT NULL AFTER instance_scenario_id, ADD CONSTRAINT FK_instance_nets_sce_nets FOREIGN KEY (sce_net_id) REFERENCES sce_nets (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
427 sql "ALTER TABLE instance_nets ADD COLUMN net_id VARCHAR(36) NULL DEFAULT NULL AFTER sce_net_id, ADD CONSTRAINT FK_instance_nets_nets FOREIGN KEY (net_id) REFERENCES nets (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
428 sql "ALTER TABLE instance_nets ADD COLUMN vim_tenant_id VARCHAR(36) NULL DEFAULT NULL AFTER net_id, ADD CONSTRAINT FK_instance_nets_vim_tenants FOREIGN KEY (vim_tenant_id) REFERENCES vim_tenants (uuid) ON UPDATE RESTRICT ON DELETE RESTRICT;"
429 sql "ALTER TABLE instance_nets ADD COLUMN datacenter_id VARCHAR(36) NULL DEFAULT NULL AFTER vim_tenant_id, ADD CONSTRAINT FK_instance_nets_datacenters FOREIGN KEY (datacenter_id) REFERENCES datacenters (uuid) ON UPDATE RESTRICT ON DELETE RESTRICT;"
430 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (6, '0.6', '0.4.2', 'Adding VIM status info', '2015-12-22');"
431 }
432 function downgrade_from_6(){
433 # echo " downgrade database from version 0.6 to version 0.5"
434 echo " Remove 'descriptor' field from 'vnfd', 'scenarios' tables"
435 sql "ALTER TABLE vnfs DROP COLUMN descriptor;"
436 sql "ALTER TABLE scenarios DROP COLUMN descriptor;"
437 echo " Remove 'last_error', 'vim_info' from 'instance_vms', 'instance_nets'"
438 sql "ALTER TABLE instance_vms DROP COLUMN error_msg, DROP COLUMN vim_info;"
439 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE','PAUSED','INACTIVE','CREATING','ERROR','DELETING') NOT NULL DEFAULT 'CREATING' AFTER vim_vm_id;"
440 sql "ALTER TABLE instance_nets DROP COLUMN error_msg, DROP COLUMN vim_info;"
441 sql "ALTER TABLE instance_nets CHANGE COLUMN status status ENUM('ACTIVE','DOWN','BUILD','ERROR') NOT NULL DEFAULT 'BUILD' AFTER instance_scenario_id;"
442 echo " Remove 'mac_address', 'ip_address', 'vim_info' from 'instance_interfaces'"
443 sql "ALTER TABLE instance_interfaces DROP COLUMN mac_address, DROP COLUMN ip_address, DROP COLUMN vim_info;"
444 echo " Remove 'sce_vnf_id','datacenter_id','vim_tenant_id' field from 'instance_vnfs'"
445 sql "ALTER TABLE instance_vnfs DROP COLUMN sce_vnf_id, DROP FOREIGN KEY FK_instance_vnfs_sce_vnfs;"
446 sql "ALTER TABLE instance_vnfs DROP COLUMN vim_tenant_id, DROP FOREIGN KEY FK_instance_vnfs_vim_tenants;"
447 sql "ALTER TABLE instance_vnfs DROP COLUMN datacenter_id, DROP FOREIGN KEY FK_instance_vnfs_datacenters;"
448 echo " Remove 'sce_net_id','net_id','datacenter_id','vim_tenant_id' field from 'instance_nets'"
449 sql "ALTER TABLE instance_nets DROP COLUMN sce_net_id, DROP FOREIGN KEY FK_instance_nets_sce_nets;"
450 sql "ALTER TABLE instance_nets DROP COLUMN net_id, DROP FOREIGN KEY FK_instance_nets_nets;"
451 sql "ALTER TABLE instance_nets DROP COLUMN vim_tenant_id, DROP FOREIGN KEY FK_instance_nets_vim_tenants;"
452 sql "ALTER TABLE instance_nets DROP COLUMN datacenter_id, DROP FOREIGN KEY FK_instance_nets_datacenters;"
453 sql "DELETE FROM schema_version WHERE version_int='6';"
454 }
455
456 function upgrade_to_7(){
457 # echo " upgrade database from version 0.6 to version 0.7"
458 echo " Change created_at, modified_at from timestamp to unix float at all database"
459 for table in datacenters datacenter_nets instance_nets instance_scenarios instance_vms instance_vnfs interfaces nets nfvo_tenants scenarios sce_interfaces sce_nets sce_vnfs tenants_datacenters vim_tenants vms vnfs uuids
460 do
461 echo -en " $table \r"
462 sql "ALTER TABLE $table ADD COLUMN created_at_ DOUBLE NOT NULL after created_at;"
463 echo "UPDATE $table SET created_at_=unix_timestamp(created_at);"
464 sql "ALTER TABLE $table DROP COLUMN created_at, CHANGE COLUMN created_at_ created_at DOUBLE NOT NULL;"
465 [[ $table == uuids ]] || sql "ALTER TABLE $table CHANGE COLUMN modified_at modified_at DOUBLE NULL DEFAULT NULL;"
466 done
467
468 echo " Add 'descriptor' field text to 'vnfd', 'scenarios'"
469 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (7, '0.7', '0.4.3', 'Changing created_at time at database', '2016-01-25');"
470 }
471 function downgrade_from_7(){
472 # echo " downgrade database from version 0.7 to version 0.6"
473 echo " Change back created_at, modified_at from unix float to timestamp at all database"
474 for table in datacenters datacenter_nets instance_nets instance_scenarios instance_vms instance_vnfs interfaces nets nfvo_tenants scenarios sce_interfaces sce_nets sce_vnfs tenants_datacenters vim_tenants vms vnfs uuids
475 do
476 echo -en " $table \r"
477 sql "ALTER TABLE $table ADD COLUMN created_at_ TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP after created_at;"
478 echo "UPDATE $table SET created_at_=from_unixtime(created_at);"
479 sql "ALTER TABLE $table DROP COLUMN created_at, CHANGE COLUMN created_at_ created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;"
480 [[ $table == uuids ]] || sql "ALTER TABLE $table CHANGE COLUMN modified_at modified_at TIMESTAMP NULL DEFAULT NULL;"
481 done
482 echo " Remove 'descriptor' field from 'vnfd', 'scenarios' tables"
483 sql "DELETE FROM schema_version WHERE version_int='7';"
484 }
485
486 function upgrade_to_8(){
487 # echo " upgrade database from version 0.7 to version 0.8"
488 echo " Change enalarge name, description to 255 at all database"
489 for table in datacenters datacenter_nets flavors images instance_scenarios nets nfvo_tenants scenarios sce_nets sce_vnfs vms vnfs
490 do
491 echo -en " $table \r"
492 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR(255) NOT NULL;"
493 sql "ALTER TABLE $table CHANGE COLUMN description description VARCHAR(255) NULL DEFAULT NULL;"
494 done
495 echo -en " interfaces \r"
496 sql "ALTER TABLE interfaces CHANGE COLUMN internal_name internal_name VARCHAR(255) NOT NULL, CHANGE COLUMN external_name external_name VARCHAR(255) NULL DEFAULT NULL;"
497 sql "ALTER TABLE vim_tenants CHANGE COLUMN vim_tenant_name vim_tenant_name VARCHAR(64) NULL DEFAULT NULL;"
498 echo -en " vim_tenants \r"
499 sql "ALTER TABLE vim_tenants CHANGE COLUMN user user VARCHAR(64) NULL DEFAULT NULL, CHANGE COLUMN passwd passwd VARCHAR(64) NULL DEFAULT NULL;"
500 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (8, '0.8', '0.4.32', 'Enlarging name at database', '2016-02-01');"
501 }
502 function downgrade_from_8(){
503 # echo " downgrade database from version 0.8 to version 0.7"
504 echo " Change back name,description to shorter length at all database"
505 for table in datacenters datacenter_nets flavors images instance_scenarios nets nfvo_tenants scenarios sce_nets sce_vnfs vms vnfs
506 do
507 name_length=50
508 [[ $table == flavors ]] || [[ $table == images ]] || name_length=36
509 echo -en " $table \r"
510 sql "ALTER TABLE $table CHANGE COLUMN name name VARCHAR($name_length) NOT NULL;"
511 sql "ALTER TABLE $table CHANGE COLUMN description description VARCHAR(100) NULL DEFAULT NULL;"
512 done
513 echo -en " interfaces \r"
514 sql "ALTER TABLE interfaces CHANGE COLUMN internal_name internal_name VARCHAR(25) NOT NULL, CHANGE COLUMN external_name external_name VARCHAR(25) NULL DEFAULT NULL;"
515 echo -en " vim_tenants \r"
516 sql "ALTER TABLE vim_tenants CHANGE COLUMN vim_tenant_name vim_tenant_name VARCHAR(36) NULL DEFAULT NULL;"
517 sql "ALTER TABLE vim_tenants CHANGE COLUMN user user VARCHAR(36) NULL DEFAULT NULL, CHANGE COLUMN passwd passwd VARCHAR(50) NULL DEFAULT NULL;"
518 sql "DELETE FROM schema_version WHERE version_int='8';"
519 }
520 function upgrade_to_9(){
521 # echo " upgrade database from version 0.8 to version 0.9"
522 echo " Add more status to 'instance_vms'"
523 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE:NoMgmtIP','ACTIVE','INACTIVE','BUILD','ERROR','VIM_ERROR','PAUSED','SUSPENDED','DELETED') NOT NULL DEFAULT 'BUILD';"
524 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (9, '0.9', '0.4.33', 'Add ACTIVE:NoMgmtIP to instance_vms table', '2016-02-05');"
525 }
526 function downgrade_from_9(){
527 # echo " downgrade database from version 0.9 to version 0.8"
528 echo " Add more status to 'instance_vms'"
529 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE','INACTIVE','BUILD','ERROR','VIM_ERROR','PAUSED','SUSPENDED','DELETED') NOT NULL DEFAULT 'BUILD';"
530 sql "DELETE FROM schema_version WHERE version_int='9';"
531 }
532 function upgrade_to_10(){
533 # echo " upgrade database from version 0.9 to version 0.10"
534 echo " add tenant to 'vnfs'"
535 sql "ALTER TABLE vnfs ADD COLUMN tenant_id VARCHAR(36) NULL DEFAULT NULL AFTER name, ADD CONSTRAINT FK_vnfs_nfvo_tenants FOREIGN KEY (tenant_id) REFERENCES nfvo_tenants (uuid) ON UPDATE CASCADE ON DELETE SET NULL, CHANGE COLUMN public public ENUM('true','false') NOT NULL DEFAULT 'false' AFTER physical, DROP INDEX name, DROP INDEX path, DROP COLUMN path;"
536 sql "ALTER TABLE scenarios DROP FOREIGN KEY FK_scenarios_nfvo_tenants;"
537 sql "ALTER TABLE scenarios CHANGE COLUMN nfvo_tenant_id tenant_id VARCHAR(36) NULL DEFAULT NULL after name, ADD CONSTRAINT FK_scenarios_nfvo_tenants FOREIGN KEY (tenant_id) REFERENCES nfvo_tenants (uuid);"
538 sql "ALTER TABLE instance_scenarios DROP FOREIGN KEY FK_instance_scenarios_nfvo_tenants;"
539 sql "ALTER TABLE instance_scenarios CHANGE COLUMN nfvo_tenant_id tenant_id VARCHAR(36) NULL DEFAULT NULL after name, ADD CONSTRAINT FK_instance_scenarios_nfvo_tenants FOREIGN KEY (tenant_id) REFERENCES nfvo_tenants (uuid);"
540 echo " rename 'vim_tenants' table to 'datacenter_tenants'"
541 echo "RENAME TABLE vim_tenants TO datacenter_tenants;"
542 for table in tenants_datacenters instance_scenarios instance_vnfs instance_nets
543 do
544 NULL="NOT NULL"
545 [[ $table == instance_vnfs ]] && NULL="NULL DEFAULT NULL"
546 sql "ALTER TABLE ${table} DROP FOREIGN KEY FK_${table}_vim_tenants;"
547 sql "ALTER TABLE ${table} ALTER vim_tenant_id DROP DEFAULT;"
548 sql "ALTER TABLE ${table} CHANGE COLUMN vim_tenant_id datacenter_tenant_id VARCHAR(36) ${NULL} AFTER datacenter_id, ADD CONSTRAINT FK_${table}_datacenter_tenants FOREIGN KEY (datacenter_tenant_id) REFERENCES datacenter_tenants (uuid); "
549 done
550 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (10, '0.10', '0.4.36', 'tenant management of vnfs,scenarios', '2016-03-08');"
551 }
552
553 function downgrade_from_10(){
554 # echo " downgrade database from version 0.10 to version 0.9"
555 echo " remove tenant from 'vnfs'"
556 sql "ALTER TABLE vnfs DROP COLUMN tenant_id, DROP FOREIGN KEY FK_vnfs_nfvo_tenants, ADD UNIQUE INDEX name (name), ADD COLUMN path VARCHAR(100) NULL DEFAULT NULL COMMENT 'Path where the YAML descriptor of the VNF can be found. NULL if it is a physical network function.' AFTER name, ADD UNIQUE INDEX path (path), CHANGE COLUMN public public ENUM('true','false') NOT NULL DEFAULT 'true' AFTER physical;"
557 sql "ALTER TABLE scenarios DROP FOREIGN KEY FK_scenarios_nfvo_tenants;"
558 sql "ALTER TABLE scenarios CHANGE COLUMN tenant_id nfvo_tenant_id VARCHAR(36) NULL DEFAULT NULL after name, ADD CONSTRAINT FK_scenarios_nfvo_tenants FOREIGN KEY (nfvo_tenant_id) REFERENCES nfvo_tenants (uuid);"
559 sql "ALTER TABLE instance_scenarios DROP FOREIGN KEY FK_instance_scenarios_nfvo_tenants;"
560 sql "ALTER TABLE instance_scenarios CHANGE COLUMN tenant_id nfvo_tenant_id VARCHAR(36) NULL DEFAULT NULL after name, ADD CONSTRAINT FK_instance_scenarios_nfvo_tenants FOREIGN KEY (nfvo_tenant_id) REFERENCES nfvo_tenants (uuid);"
561 echo " rename back 'datacenter_tenants' table to 'vim_tenants'"
562 echo "RENAME TABLE datacenter_tenants TO vim_tenants;"
563 for table in tenants_datacenters instance_scenarios instance_vnfs instance_nets
564 do
565 sql "ALTER TABLE ${table} DROP FOREIGN KEY FK_${table}_datacenter_tenants;"
566 NULL="NOT NULL"
567 [[ $table == instance_vnfs ]] && NULL="NULL DEFAULT NULL"
568 sql "ALTER TABLE ${table} ALTER datacenter_tenant_id DROP DEFAULT;"
569 sql "ALTER TABLE ${table} CHANGE COLUMN datacenter_tenant_id vim_tenant_id VARCHAR(36) $NULL AFTER datacenter_id, ADD CONSTRAINT FK_${table}_vim_tenants FOREIGN KEY (vim_tenant_id) REFERENCES vim_tenants (uuid); "
570 done
571 sql "DELETE FROM schema_version WHERE version_int='10';"
572 }
573
574 function upgrade_to_11(){
575 # echo " upgrade database from version 0.10 to version 0.11"
576 echo " remove unique name at 'scenarios', 'instance_scenarios'"
577 sql "ALTER TABLE scenarios DROP INDEX name;"
578 sql "ALTER TABLE instance_scenarios DROP INDEX name;"
579 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (11, '0.11', '0.4.43', 'remove unique name at scenarios,instance_scenarios', '2016-07-18');"
580 }
581 function downgrade_from_11(){
582 # echo " downgrade database from version 0.11 to version 0.10"
583 echo " add unique name at 'scenarios', 'instance_scenarios'"
584 sql "ALTER TABLE scenarios ADD UNIQUE INDEX name (name);"
585 sql "ALTER TABLE instance_scenarios ADD UNIQUE INDEX name (name);"
586 sql "DELETE FROM schema_version WHERE version_int='11';"
587 }
588
589 function upgrade_to_12(){
590 # echo " upgrade database from version 0.11 to version 0.12"
591 echo " create ip_profiles table, with foreign keys to all nets tables, and add ip_address column to 'interfaces' and 'sce_interfaces'"
592 sql "CREATE TABLE IF NOT EXISTS ip_profiles (
593 id INT(11) NOT NULL AUTO_INCREMENT,
594 net_id VARCHAR(36) NULL DEFAULT NULL,
595 sce_net_id VARCHAR(36) NULL DEFAULT NULL,
596 instance_net_id VARCHAR(36) NULL DEFAULT NULL,
597 ip_version ENUM('IPv4','IPv6') NOT NULL DEFAULT 'IPv4',
598 subnet_address VARCHAR(64) NULL DEFAULT NULL,
599 gateway_address VARCHAR(64) NULL DEFAULT NULL,
600 dns_address VARCHAR(64) NULL DEFAULT NULL,
601 dhcp_enabled ENUM('true','false') NOT NULL DEFAULT 'true',
602 dhcp_start_address VARCHAR(64) NULL DEFAULT NULL,
603 dhcp_count INT(11) NULL DEFAULT NULL,
604 PRIMARY KEY (id),
605 CONSTRAINT FK_ipprofiles_nets FOREIGN KEY (net_id) REFERENCES nets (uuid) ON DELETE CASCADE,
606 CONSTRAINT FK_ipprofiles_scenets FOREIGN KEY (sce_net_id) REFERENCES sce_nets (uuid) ON DELETE CASCADE,
607 CONSTRAINT FK_ipprofiles_instancenets FOREIGN KEY (instance_net_id) REFERENCES instance_nets (uuid) ON DELETE CASCADE )
608 COMMENT='Table containing the IP parameters of a network, either a net, a sce_net or and instance_net.'
609 COLLATE='utf8_general_ci'
610 ENGINE=InnoDB;"
611 sql "ALTER TABLE interfaces ADD COLUMN ip_address VARCHAR(64) NULL DEFAULT NULL AFTER mac;"
612 sql "ALTER TABLE sce_interfaces ADD COLUMN ip_address VARCHAR(64) NULL DEFAULT NULL AFTER interface_id;"
613 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (12, '0.12', '0.4.46', 'create ip_profiles table, with foreign keys to all nets tables, and add ip_address column to interfaces and sce_interfaces', '2016-08-29');"
614 }
615 function downgrade_from_12(){
616 # echo " downgrade database from version 0.12 to version 0.11"
617 echo " delete ip_profiles table, and remove ip_address column in 'interfaces' and 'sce_interfaces'"
618 sql "DROP TABLE ip_profiles;"
619 sql "ALTER TABLE interfaces DROP COLUMN ip_address;"
620 sql "ALTER TABLE sce_interfaces DROP COLUMN ip_address;"
621 sql "DELETE FROM schema_version WHERE version_int='12';"
622 }
623
624 function upgrade_to_13(){
625 # echo " upgrade database from version 0.12 to version 0.13"
626 echo " add cloud_config at 'scenarios', 'instance_scenarios'"
627 sql "ALTER TABLE scenarios ADD COLUMN cloud_config MEDIUMTEXT NULL DEFAULT NULL AFTER descriptor;"
628 sql "ALTER TABLE instance_scenarios ADD COLUMN cloud_config MEDIUMTEXT NULL DEFAULT NULL AFTER modified_at;"
629 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (13, '0.13', '0.4.47', 'insert cloud-config at scenarios,instance_scenarios', '2016-08-30');"
630 }
631 function downgrade_from_13(){
632 # echo " downgrade database from version 0.13 to version 0.12"
633 echo " remove cloud_config at 'scenarios', 'instance_scenarios'"
634 sql "ALTER TABLE scenarios DROP COLUMN cloud_config;"
635 sql "ALTER TABLE instance_scenarios DROP COLUMN cloud_config;"
636 sql "DELETE FROM schema_version WHERE version_int='13';"
637 }
638
639 function upgrade_to_14(){
640 # echo " upgrade database from version 0.13 to version 0.14"
641 echo " remove unique index vim_net_id, instance_scenario_id at table 'instance_nets'"
642 sql "ALTER TABLE instance_nets DROP INDEX vim_net_id_instance_scenario_id;"
643 sql "ALTER TABLE instance_nets CHANGE COLUMN external created ENUM('true','false') NOT NULL DEFAULT 'false' COMMENT 'Created or already exists at VIM' AFTER multipoint;"
644 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (14, '0.14', '0.4.57', 'remove unique index vim_net_id, instance_scenario_id', '2016-09-26');"
645 }
646 function downgrade_from_14(){
647 # echo " downgrade database from version 0.14 to version 0.13"
648 echo " remove cloud_config at 'scenarios', 'instance_scenarios'"
649 sql "ALTER TABLE instance_nets ADD UNIQUE INDEX vim_net_id_instance_scenario_id (vim_net_id, instance_scenario_id);"
650 sql "ALTER TABLE instance_nets CHANGE COLUMN created external ENUM('true','false') NOT NULL DEFAULT 'false' COMMENT 'If external, means that it already exists at VIM' AFTER multipoint;"
651 sql "DELETE FROM schema_version WHERE version_int='14';"
652 }
653
654 function upgrade_to_15(){
655 # echo " upgrade database from version 0.14 to version 0.15"
656 echo " add columns 'universal_name' and 'checksum' at table 'images', add unique index universal_name_checksum, and change location to allow NULL; change column 'image_path' in table 'vms' to allow NULL"
657 sql "ALTER TABLE images ADD COLUMN checksum VARCHAR(32) NULL DEFAULT NULL AFTER name;"
658 sql "ALTER TABLE images ALTER location DROP DEFAULT;"
659 sql "ALTER TABLE images ADD COLUMN universal_name VARCHAR(255) NULL AFTER name, CHANGE COLUMN location location VARCHAR(200) NULL AFTER checksum, ADD UNIQUE INDEX universal_name_checksum (universal_name, checksum);"
660 sql "ALTER TABLE vms ALTER image_path DROP DEFAULT;"
661 sql "ALTER TABLE vms CHANGE COLUMN image_path image_path VARCHAR(100) NULL COMMENT 'Path where the image of the VM is located' AFTER image_id;"
662 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (15, '0.15', '0.4.59', 'add columns universal_name and checksum at table images, add unique index universal_name_checksum, and change location to allow NULL; change column image_path in table vms to allow NULL', '2016-09-27');"
663 }
664 function downgrade_from_15(){
665 # echo " downgrade database from version 0.15 to version 0.14"
666 echo " remove columns 'universal_name' and 'checksum' from table 'images', remove index universal_name_checksum, change location NOT NULL; change column 'image_path' in table 'vms' to NOT NULL"
667 sql "ALTER TABLE images DROP INDEX universal_name_checksum;"
668 sql "ALTER TABLE images ALTER location DROP DEFAULT;"
669 sql "ALTER TABLE images CHANGE COLUMN location location VARCHAR(200) NOT NULL AFTER checksum;"
670 sql "ALTER TABLE images DROP COLUMN universal_name;"
671 sql "ALTER TABLE images DROP COLUMN checksum;"
672 sql "ALTER TABLE vms ALTER image_path DROP DEFAULT;"
673 sql "ALTER TABLE vms CHANGE COLUMN image_path image_path VARCHAR(100) NOT NULL COMMENT 'Path where the image of the VM is located' AFTER image_id;"
674 sql "DELETE FROM schema_version WHERE version_int='15';"
675 }
676
677 function upgrade_to_16(){
678 # echo " upgrade database from version 0.15 to version 0.16"
679 echo " add column 'config' at table 'datacenter_tenants', enlarge 'vim_tenant_name/id'"
680 sql "ALTER TABLE datacenter_tenants ADD COLUMN config VARCHAR(4000) NULL DEFAULT NULL AFTER passwd;"
681 sql "ALTER TABLE datacenter_tenants CHANGE COLUMN vim_tenant_name vim_tenant_name VARCHAR(256) NULL DEFAULT NULL AFTER datacenter_id;"
682 sql "ALTER TABLE datacenter_tenants CHANGE COLUMN vim_tenant_id vim_tenant_id VARCHAR(256) NULL DEFAULT NULL COMMENT 'Tenant ID at VIM' AFTER vim_tenant_name;"
683 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (16, '0.16', '0.5.2', 'enlarge vim_tenant_name and id. New config at datacenter_tenants', '2016-10-11');"
684 }
685 function downgrade_from_16(){
686 # echo " downgrade database from version 0.16 to version 0.15"
687 echo " remove column 'config' at table 'datacenter_tenants', restoring lenght 'vim_tenant_name/id'"
688 sql "ALTER TABLE datacenter_tenants DROP COLUMN config;"
689 sql "ALTER TABLE datacenter_tenants CHANGE COLUMN vim_tenant_name vim_tenant_name VARCHAR(64) NULL DEFAULT NULL AFTER datacenter_id;"
690 sql "ALTER TABLE datacenter_tenants CHANGE COLUMN vim_tenant_id vim_tenant_id VARCHAR(36) NULL DEFAULT NULL COMMENT 'Tenant ID at VIM' AFTER vim_tenant_name;"
691 sql "DELETE FROM schema_version WHERE version_int='16';"
692 }
693
694 function upgrade_to_17(){
695 # echo " upgrade database from version 0.16 to version 0.17"
696 echo " add column 'extended' at table 'datacenter_flavors'"
697 sql "ALTER TABLE datacenters_flavors ADD extended varchar(2000) NULL COMMENT 'Extra description json format of additional devices';"
698 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (17, '0.17', '0.5.3', 'Extra description json format of additional devices in datacenter_flavors', '2016-12-20');"
699 }
700 function downgrade_from_17(){
701 # echo " downgrade database from version 0.17 to version 0.16"
702 echo " remove column 'extended' from table 'datacenter_flavors'"
703 sql "ALTER TABLE datacenters_flavors DROP COLUMN extended;"
704 sql "DELETE FROM schema_version WHERE version_int='17';"
705 }
706
707 function upgrade_to_18(){
708 # echo " upgrade database from version 0.17 to version 0.18"
709 echo " add columns 'floating_ip' and 'port_security' at tables 'interfaces' and 'instance_interfaces'"
710 sql "ALTER TABLE interfaces ADD floating_ip BOOL DEFAULT 0 NOT NULL COMMENT 'Indicates if a floating_ip must be associated to this interface';"
711 sql "ALTER TABLE interfaces ADD port_security BOOL DEFAULT 1 NOT NULL COMMENT 'Indicates if port security must be enabled or disabled. By default it is enabled';"
712 sql "ALTER TABLE instance_interfaces ADD floating_ip BOOL DEFAULT 0 NOT NULL COMMENT 'Indicates if a floating_ip must be associated to this interface';"
713 sql "ALTER TABLE instance_interfaces ADD port_security BOOL DEFAULT 1 NOT NULL COMMENT 'Indicates if port security must be enabled or disabled. By default it is enabled';"
714 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (18, '0.18', '0.5.4', 'Add columns \'floating_ip\' and \'port_security\' at tables \'interfaces\' and \'instance_interfaces\'', '2017-01-09');"
715 }
716 function downgrade_from_18(){
717 # echo " downgrade database from version 0.18 to version 0.17"
718 echo " remove columns 'floating_ip' and 'port_security' from tables 'interfaces' and 'instance_interfaces'"
719 sql "ALTER TABLE interfaces DROP COLUMN floating_ip;"
720 sql "ALTER TABLE interfaces DROP COLUMN port_security;"
721 sql "ALTER TABLE instance_interfaces DROP COLUMN floating_ip;"
722 sql "ALTER TABLE instance_interfaces DROP COLUMN port_security;"
723 sql "DELETE FROM schema_version WHERE version_int='18';"
724 }
725
726 function upgrade_to_19(){
727 # echo " upgrade database from version 0.18 to version 0.19"
728 echo " add column 'boot_data' at table 'vms'"
729 sql "ALTER TABLE vms ADD COLUMN boot_data TEXT NULL DEFAULT NULL AFTER image_path;"
730 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (19, '0.19', '0.5.5', 'Extra Boot-data content at VNFC (vms)', '2017-01-11');"
731 }
732 function downgrade_from_19(){
733 # echo " downgrade database from version 0.19 to version 0.18"
734 echo " remove column 'boot_data' from table 'vms'"
735 sql "ALTER TABLE vms DROP COLUMN boot_data;"
736 sql "DELETE FROM schema_version WHERE version_int='19';"
737 }
738
739 function upgrade_to_20(){
740 # echo " upgrade database from version 0.19 to version 0.20"
741 echo " add column 'sdn_net_id' at table 'instance_nets' and columns 'sdn_port_id', 'compute_node', 'pci' and 'vlan' to table 'instance_interfaces'"
742 sql "ALTER TABLE instance_nets ADD sdn_net_id varchar(36) DEFAULT NULL NULL COMMENT 'Network id in ovim';"
743 sql "ALTER TABLE instance_interfaces ADD sdn_port_id varchar(36) DEFAULT NULL NULL COMMENT 'Port id in ovim';"
744 sql "ALTER TABLE instance_interfaces ADD compute_node varchar(100) DEFAULT NULL NULL COMMENT 'Compute node id used to specify the SDN port mapping';"
745 sql "ALTER TABLE instance_interfaces ADD pci varchar(12) DEFAULT NULL NULL COMMENT 'PCI of the physical port in the host';"
746 sql "ALTER TABLE instance_interfaces ADD vlan SMALLINT UNSIGNED DEFAULT NULL NULL COMMENT 'VLAN tag used by the port';"
747 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (20, '0.20', '0.5.9', 'Added columns to store dataplane connectivity info', '2017-03-13');"
748 }
749 function downgrade_from_20(){
750 # echo " downgrade database from version 0.20 to version 0.19"
751 echo " remove column 'sdn_net_id' at table 'instance_nets' and columns 'sdn_port_id', 'compute_node', 'pci' and 'vlan' to table 'instance_interfaces'"
752 sql "ALTER TABLE instance_nets DROP COLUMN sdn_net_id;"
753 sql "ALTER TABLE instance_interfaces DROP COLUMN vlan;"
754 sql "ALTER TABLE instance_interfaces DROP COLUMN pci;"
755 sql "ALTER TABLE instance_interfaces DROP COLUMN compute_node;"
756 sql "ALTER TABLE instance_interfaces DROP COLUMN sdn_port_id;"
757 sql "DELETE FROM schema_version WHERE version_int='20';"
758 }
759
760 function upgrade_to_21(){
761 # echo " upgrade database from version 0.20 to version 0.21"
762 echo " edit 'instance_nets' to allow instance_scenario_id=None"
763 sql "ALTER TABLE instance_nets MODIFY COLUMN instance_scenario_id varchar(36) NULL;"
764 echo " enlarge column 'dns_address' at table 'ip_profiles'"
765 sql "ALTER TABLE ip_profiles MODIFY dns_address varchar(255) DEFAULT NULL NULL "\
766 "comment 'dns ip list separated by semicolon';"
767 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (21, '0.21', '0.5.15', 'Edit instance_nets to allow instance_scenario_id=None and enlarge column dns_address at table ip_profiles', '2017-06-02');"
768 }
769 function downgrade_from_21(){
770 # echo " downgrade database from version 0.21 to version 0.20"
771 echo " edit 'instance_nets' to disallow instance_scenario_id=None"
772 #Delete all lines with a instance_scenario_id=NULL in order to disable this option
773 sql "DELETE FROM instance_nets WHERE instance_scenario_id IS NULL;"
774 sql "ALTER TABLE instance_nets MODIFY COLUMN instance_scenario_id varchar(36) NOT NULL;"
775 echo " shorten column 'dns_address' at table 'ip_profiles'"
776 sql "ALTER TABLE ip_profiles MODIFY dns_address varchar(64) DEFAULT NULL NULL;"
777 sql "DELETE FROM schema_version WHERE version_int='21';"
778 }
779
780 function upgrade_to_22(){
781 # echo " upgrade database from version 0.21 to version 0.22"
782 echo " Changed type of ram in 'flavors' from SMALLINT to MEDIUMINT"
783 sql "ALTER TABLE flavors CHANGE COLUMN ram ram MEDIUMINT(7) UNSIGNED NULL DEFAULT NULL AFTER disk;"
784 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (22, '0.22', '0.5.16', 'Changed type of ram in flavors from SMALLINT to MEDIUMINT', '2017-06-02');"
785 }
786 function downgrade_from_22(){
787 # echo " downgrade database from version 0.22 to version 0.21"
788 echo " Changed type of ram in 'flavors' from MEDIUMINT to SMALLINT"
789 sql "ALTER TABLE flavors CHANGE COLUMN ram ram SMALLINT(5) UNSIGNED NULL DEFAULT NULL AFTER disk;"
790 sql "DELETE FROM schema_version WHERE version_int='22';"
791 }
792
793 function upgrade_to_23(){
794 # echo " upgrade database from version 0.22 to version 0.23"
795 echo " add column 'availability_zone' at table 'vms'"
796 sql "ALTER TABLE mano_db.vms ADD COLUMN availability_zone VARCHAR(255) NULL AFTER modified_at;"
797 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) VALUES (23, '0.23', '0.5.20',"\
798 "'Changed type of ram in flavors from SMALLINT to MEDIUMINT', '2017-08-29');"
799 }
800 function downgrade_from_23(){
801 # echo " downgrade database from version 0.23 to version 0.22"
802 echo " remove column 'availability_zone' from table 'vms'"
803 sql "ALTER TABLE mano_db.vms DROP COLUMN availability_zone;"
804 sql "DELETE FROM schema_version WHERE version_int='23';"
805 }
806
807 function upgrade_to_24(){
808 # echo " upgrade database from version 0.23 to version 0.24"
809 echo " Add 'count' to table 'vms'"
810 sql "ALTER TABLE vms ADD COLUMN count SMALLINT NOT NULL DEFAULT '1' AFTER vnf_id;"
811 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) "\
812 "VALUES (24, '0.24', '0.5.21', 'Added vnfd fields', '2017-08-29');"
813 }
814 function downgrade_from_24(){
815 # echo " downgrade database from version 0.24 to version 0.23"
816 echo " Remove 'count' from table 'vms'"
817 sql "ALTER TABLE vms DROP COLUMN count;"
818 sql "DELETE FROM schema_version WHERE version_int='24';"
819 }
820 function upgrade_to_25(){
821 # echo " upgrade database from version 0.24 to version 0.25"
822 echo " Add 'osm_id','short_name','vendor' to tables 'vnfs', 'scenarios'"
823 for table in vnfs scenarios; do
824 sql "ALTER TABLE $table ADD COLUMN osm_id VARCHAR(255) NULL AFTER uuid, "\
825 "ADD UNIQUE INDEX osm_id_tenant_id (osm_id, tenant_id), "\
826 "ADD COLUMN short_name VARCHAR(255) NULL AFTER name, "\
827 "ADD COLUMN vendor VARCHAR(255) NULL AFTER description;"
828 done
829 sql "ALTER TABLE vnfs ADD COLUMN mgmt_access VARCHAR(2000) NULL AFTER vendor;"
830 sql "ALTER TABLE vms ADD COLUMN osm_id VARCHAR(255) NULL AFTER uuid;"
831 sql "ALTER TABLE sce_vnfs ADD COLUMN member_vnf_index SMALLINT(6) NULL DEFAULT NULL AFTER uuid;"
832 echo " Add 'security_group' to table 'ip_profiles'"
833 sql "ALTER TABLE ip_profiles ADD COLUMN security_group VARCHAR(255) NULL DEFAULT NULL AFTER dhcp_count;"
834
835 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) "\
836 "VALUES (25, '0.25', '0.5.22', 'Added osm_id to vnfs,scenarios', '2017-09-01');"
837 }
838 function downgrade_from_25(){
839 # echo " downgrade database from version 0.25 to version 0.24"
840 echo " Remove 'osm_id','short_name','vendor' from tables 'vnfs', 'scenarios'"
841 for table in vnfs scenarios; do
842 sql "ALTER TABLE $table DROP INDEX osm_id_tenant_id, DROP COLUMN osm_id, "\
843 "DROP COLUMN short_name, DROP COLUMN vendor;"
844 done
845 sql "ALTER TABLE vnfs DROP COLUMN mgmt_access;"
846 sql "ALTER TABLE vms DROP COLUMN osm_id;"
847 sql "ALTER TABLE sce_vnfs DROP COLUMN member_vnf_index;"
848 echo " Remove 'security_group' from table 'ip_profiles'"
849 sql "ALTER TABLE ip_profiles DROP COLUMN security_group;"
850
851 sql "DELETE FROM schema_version WHERE version_int='25';"
852 }
853
854 function upgrade_to_26(){
855 echo " Add name to table datacenter_tenants"
856 sql "ALTER TABLE datacenter_tenants ADD COLUMN name VARCHAR(255) NULL AFTER uuid;"
857 sql "UPDATE datacenter_tenants as dt join datacenters as d on dt.datacenter_id = d.uuid set dt.name=d.name;"
858 echo " Add 'SCHEDULED' to 'status' at tables 'instance_nets', 'instance_vms'"
859 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE:NoMgmtIP','ACTIVE','INACTIVE','BUILD',"\
860 "'ERROR','VIM_ERROR','PAUSED','SUSPENDED','DELETED','SCHEDULED_CREATION','SCHEDULED_DELETION') "\
861 "NOT NULL DEFAULT 'BUILD';"
862 sql "ALTER TABLE instance_nets CHANGE COLUMN status status ENUM('ACTIVE','INACTIVE','DOWN','BUILD','ERROR',"\
863 "'VIM_ERROR','DELETED','SCHEDULED_CREATION','SCHEDULED_DELETION') NOT NULL DEFAULT 'BUILD';"
864 echo " Enlarge pci at instance_interfaces to allow extended pci for SDN por mapping"
865 sql "ALTER TABLE instance_interfaces CHANGE COLUMN pci pci VARCHAR(50) NULL DEFAULT NULL COMMENT 'PCI of the "\
866 "physical port in the host' AFTER compute_node;"
867
868 for t in flavor image; do
869 echo " Change 'datacenters_${t}s' to point to datacenter_tenant, add status, vim_info"
870 sql "ALTER TABLE datacenters_${t}s ADD COLUMN datacenter_vim_id VARCHAR(36) NULL DEFAULT NULL AFTER "\
871 "datacenter_id, ADD COLUMN status ENUM('ACTIVE','INACTIVE','BUILD','ERROR','VIM_ERROR','DELETED',"\
872 "'SCHEDULED_CREATION','SCHEDULED_DELETION') NOT NULL DEFAULT 'BUILD' AFTER vim_id, ADD COLUMN vim_info "\
873 "TEXT NULL AFTER status;"
874 sql "UPDATE datacenters_${t}s as df left join datacenter_tenants as dt on dt.datacenter_id=df.datacenter_id "\
875 "set df.datacenter_vim_id=dt.uuid;"
876 sql "DELETE FROM datacenters_${t}s WHERE datacenter_vim_id is NULL;"
877 sql "ALTER TABLE datacenters_${t}s CHANGE COLUMN datacenter_vim_id datacenter_vim_id VARCHAR(36) NOT NULL;"
878 sql "ALTER TABLE datacenters_${t}s ADD CONSTRAINT FK_datacenters_${t}s_datacenter_tenants FOREIGN KEY "\
879 "(datacenter_vim_id) REFERENCES datacenter_tenants (uuid) ON UPDATE CASCADE ON DELETE CASCADE;"
880 sql "ALTER TABLE datacenters_${t}s DROP FOREIGN KEY FK__datacenters_${t:0:1};"
881 sql "ALTER TABLE datacenters_${t}s DROP COLUMN datacenter_id;"
882 done
883
884 echo " Decoupling 'instance_interfaces' from scenarios/vnfs to allow scale actions"
885 sql "ALTER TABLE instance_interfaces CHANGE COLUMN vim_interface_id vim_interface_id VARCHAR(128) NULL DEFAULT NULL;"
886 sql "ALTER TABLE instance_interfaces CHANGE COLUMN interface_id interface_id VARCHAR(36) NULL DEFAULT NULL;"
887 sql "ALTER TABLE instance_interfaces DROP FOREIGN KEY FK_instance_ids"
888 sql "ALTER TABLE instance_interfaces ADD CONSTRAINT FK_instance_ids FOREIGN KEY (interface_id) "\
889 "REFERENCES interfaces (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
890
891 echo " Decoupling 'instance_vms' from scenarios/vnfs to allow scale actions"
892 sql "ALTER TABLE instance_vms CHANGE COLUMN vim_vm_id vim_vm_id VARCHAR(128) NULL DEFAULT NULL;"
893 sql "ALTER TABLE instance_vms CHANGE COLUMN vm_id vm_id VARCHAR(36) NULL DEFAULT NULL;"
894 sql "ALTER TABLE instance_vms DROP FOREIGN KEY FK_instance_vms_vms;"
895 sql "ALTER TABLE instance_vms ADD CONSTRAINT FK_instance_vms_vms FOREIGN KEY (vm_id) "\
896 "REFERENCES vms (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
897
898 echo " Decoupling 'instance_nets' from scenarios/vnfs to allow scale actions"
899 sql "ALTER TABLE instance_nets CHANGE COLUMN vim_net_id vim_net_id VARCHAR(128) NULL DEFAULT NULL;"
900
901 echo " Decoupling 'instance_scenarios' from scenarios"
902 sql "ALTER TABLE instance_scenarios CHANGE COLUMN scenario_id scenario_id VARCHAR(36) NULL DEFAULT NULL;"
903 sql "ALTER TABLE instance_scenarios DROP FOREIGN KEY FK_instance_scenarios_scenarios;"
904 sql "ALTER TABLE instance_scenarios ADD CONSTRAINT FK_instance_scenarios_scenarios FOREIGN KEY (scenario_id) "\
905 "REFERENCES scenarios (uuid) ON UPDATE CASCADE ON DELETE SET NULL;"
906
907 echo " Create table instance_actions, vim_actions"
908 sql "CREATE TABLE IF NOT EXISTS instance_actions (
909 uuid VARCHAR(36) NOT NULL,
910 tenant_id VARCHAR(36) NULL DEFAULT NULL,
911 instance_id VARCHAR(36) NULL DEFAULT NULL,
912 description VARCHAR(64) NULL DEFAULT NULL COMMENT 'CREATE, DELETE, SCALE OUT/IN, ...',
913 number_tasks SMALLINT(6) NOT NULL DEFAULT '1',
914 number_done SMALLINT(6) NOT NULL DEFAULT '0',
915 number_failed SMALLINT(6) NOT NULL DEFAULT '0',
916 created_at DOUBLE NOT NULL,
917 modified_at DOUBLE NULL DEFAULT NULL,
918 PRIMARY KEY (uuid),
919 INDEX FK_actions_tenants (tenant_id),
920 CONSTRAINT FK_actions_tenant FOREIGN KEY (tenant_id) REFERENCES nfvo_tenants (uuid) ON UPDATE CASCADE ON DELETE CASCADE)
921 COMMENT='Contains client actions over instances'
922 COLLATE='utf8_general_ci'
923 ENGINE=InnoDB;"
924
925 sql "CREATE TABLE IF NOT EXISTS vim_actions (
926 instance_action_id VARCHAR(36) NOT NULL,
927 task_index INT(6) NOT NULL,
928 datacenter_vim_id VARCHAR(36) NOT NULL,
929 vim_id VARCHAR(64) NULL DEFAULT NULL,
930 action VARCHAR(36) NOT NULL COMMENT 'CREATE,DELETE,START,STOP...',
931 item ENUM('datacenters_flavors','datacenter_images','instance_nets','instance_vms','instance_interfaces') NOT NULL COMMENT 'table where the item is stored',
932 item_id VARCHAR(36) NULL DEFAULT NULL COMMENT 'uuid of the entry in the table',
933 status ENUM('SCHEDULED', 'BUILD', 'DONE', 'FAILED', 'SUPERSEDED') NOT NULL DEFAULT 'SCHEDULED',
934 extra TEXT NULL DEFAULT NULL COMMENT 'json with params:, depends_on: for the task',
935 error_msg VARCHAR(1024) NULL DEFAULT NULL,
936 created_at DOUBLE NOT NULL,
937 modified_at DOUBLE NULL DEFAULT NULL,
938 PRIMARY KEY (task_index, instance_action_id),
939 INDEX FK_actions_instance_actions (instance_action_id),
940 CONSTRAINT FK_actions_instance_actions FOREIGN KEY (instance_action_id) REFERENCES instance_actions (uuid) ON UPDATE CASCADE ON DELETE CASCADE,
941 INDEX FK_actions_vims (datacenter_vim_id),
942 CONSTRAINT FK_actions_vims FOREIGN KEY (datacenter_vim_id) REFERENCES datacenter_tenants (uuid) ON UPDATE CASCADE ON DELETE CASCADE)
943 COMMENT='Table with the individual VIM actions.'
944 COLLATE='utf8_general_ci'
945 ENGINE=InnoDB;"
946
947 sql "INSERT INTO schema_version (version_int, version, openmano_ver, comments, date) "\
948 "VALUES (26, '0.26', '0.5.23', 'Several changes', '2017-09-09');"
949 }
950 function downgrade_from_26(){
951 echo " Remove name from table datacenter_tenants"
952 sql "ALTER TABLE datacenter_tenants DROP COLUMN name;"
953 echo " Remove 'SCHEDULED' from the 'status' at tables 'instance_nets', 'instance_vms'"
954 sql "ALTER TABLE instance_vms CHANGE COLUMN status status ENUM('ACTIVE:NoMgmtIP','ACTIVE','INACTIVE','BUILD',"\
955 "'ERROR','VIM_ERROR','PAUSED','SUSPENDED','DELETED') NOT NULL DEFAULT 'BUILD';"
956 sql "ALTER TABLE instance_nets CHANGE COLUMN status status ENUM('ACTIVE','DOWN','BUILD','ERROR','VIM_ERROR',"\
957 "'INACTIVE','DELETED') NOT NULL DEFAULT 'BUILD';"
958 echo " Shorten back pci at instance_interfaces to allow extended pci for SDN por mapping"
959 sql "ALTER TABLE instance_interfaces CHANGE COLUMN pci pci VARCHAR(12) NULL DEFAULT NULL COMMENT 'PCI of the "\
960 "physical port in the host' AFTER compute_node;"
961
962 for t in flavor image; do
963 echo " Restore back 'datacenters_${t}s'"
964 sql "ALTER TABLE datacenters_${t}s ADD COLUMN datacenter_id VARCHAR(36) NULL DEFAULT NULL AFTER "\
965 "${t}_id, DROP COLUMN status, DROP COLUMN vim_info ;"
966 sql "UPDATE datacenters_${t}s as df left join datacenter_tenants as dt on dt.uuid=df.datacenter_vim_id set "\
967 "df.datacenter_id=dt.datacenter_id;"
968 sql "ALTER TABLE datacenters_${t}s CHANGE COLUMN datacenter_id datacenter_id VARCHAR(36) NOT NULL;"
969 sql "ALTER TABLE datacenters_${t}s ADD CONSTRAINT FK__datacenters_${t:0:1} FOREIGN KEY "\
970 "(datacenter_id) REFERENCES datacenters (uuid), DROP FOREIGN KEY FK_datacenters_${t}s_datacenter_tenants, "\
971 "DROP COLUMN datacenter_vim_id;"
972 done
973
974 echo " Restore back 'instance_interfaces' coupling to scenarios/vnfs"
975 sql "ALTER TABLE instance_interfaces CHANGE COLUMN vim_interface_id vim_interface_id VARCHAR(36) NULL DEFAULT NULL;"
976 sql "ALTER TABLE instance_interfaces DROP FOREIGN KEY FK_instance_ids"
977 sql "ALTER TABLE instance_interfaces CHANGE COLUMN interface_id interface_id VARCHAR(36) NOT NULL;"
978 sql "ALTER TABLE instance_interfaces ADD CONSTRAINT FK_instance_ids FOREIGN KEY (interface_id) "\
979 "REFERENCES interfaces (uuid);"
980
981 echo " Restore back 'instance_vms' coupling to scenarios/vnfs"
982 echo " Decoupling 'instance vms' from scenarios/vnfs to allow scale actions"
983 sql "UPDATE instance_vms SET vim_vm_id='' WHERE vim_vm_id is NULL;"
984 sql "ALTER TABLE instance_vms CHANGE COLUMN vim_vm_id vim_vm_id VARCHAR(36) NOT NULL;"
985 sql "ALTER TABLE instance_vms DROP FOREIGN KEY FK_instance_vms_vms;"
986 sql "ALTER TABLE instance_vms CHANGE COLUMN vm_id vm_id VARCHAR(36) NOT NULL;"
987 sql "ALTER TABLE instance_vms ADD CONSTRAINT FK_instance_vms_vms FOREIGN KEY (vm_id) "\
988 "REFERENCES vms (uuid);"
989
990 echo " Restore back 'instance_nets' coupling to scenarios/vnfs"
991 sql "UPDATE instance_nets SET vim_net_id='' WHERE vim_net_id is NULL;"
992 sql "ALTER TABLE instance_nets CHANGE COLUMN vim_net_id vim_net_id VARCHAR(36) NOT NULL;"
993
994 echo " Restore back 'instance_scenarios' coupling to scenarios"
995 sql "ALTER TABLE instance_scenarios DROP FOREIGN KEY FK_instance_scenarios_scenarios;"
996 sql "ALTER TABLE instance_scenarios CHANGE COLUMN scenario_id scenario_id VARCHAR(36) NOT NULL;"
997 sql "ALTER TABLE instance_scenarios ADD CONSTRAINT FK_instance_scenarios_scenarios FOREIGN KEY (scenario_id) "\
998 "REFERENCES scenarios (uuid);"
999
1000 echo " Delete table instance_actions"
1001 sql "DROP TABLE vim_actions"
1002 sql "DROP TABLE instance_actions"
1003 sql "DELETE FROM schema_version WHERE version_int='26';"
1004 }
1005
1006 function upgrade_to_X(){
1007 echo " change 'datacenter_nets'"
1008 sql "ALTER TABLE datacenter_nets ADD COLUMN vim_tenant_id VARCHAR(36) NOT NULL AFTER datacenter_id, DROP INDEX name_datacenter_id, ADD UNIQUE INDEX name_datacenter_id (name, datacenter_id, vim_tenant_id);"
1009 }
1010 function downgrade_from_X(){
1011 echo " Change back 'datacenter_nets'"
1012 sql "ALTER TABLE datacenter_nets DROP COLUMN vim_tenant_id, DROP INDEX name_datacenter_id, ADD UNIQUE INDEX name_datacenter_id (name, datacenter_id);"
1013 }
1014 #TODO ... put functions here
1015
1016 # echo "db version = "${DATABASE_VER_NUM}
1017 [ $DB_VERSION -eq $DATABASE_VER_NUM ] && echo " current database version '$DATABASE_VER_NUM' is ok" && exit 0
1018
1019 # Create a backup database content
1020 TEMPFILE2="$(mktemp -q --tmpdir "backupdb.XXXXXX.sql")"
1021 trap 'rm -f "$TEMPFILE2"' EXIT
1022 mysqldump $DEF_EXTRA_FILE_PARAM --add-drop-table --add-drop-database --routines --databases $DBNAME > $TEMPFILE2
1023
1024 function rollback_db()
1025 {
1026 cat $TEMPFILE2 | mysql $DEF_EXTRA_FILE_PARAM && echo " Aborted! Rollback database OK" ||
1027 echo " Aborted! Rollback database FAIL"
1028 exit 1
1029 }
1030
1031 function sql() # send a sql command
1032 {
1033 echo "$*" | $DBCMD || ! echo " ERROR with command '$*'" || rollback_db
1034 return 0
1035 }
1036
1037 #UPGRADE DATABASE step by step
1038 while [ $DB_VERSION -gt $DATABASE_VER_NUM ]
1039 do
1040 echo " upgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM+1))'"
1041 DATABASE_VER_NUM=$((DATABASE_VER_NUM+1))
1042 upgrade_to_${DATABASE_VER_NUM}
1043 #FILE_="${DIRNAME}/upgrade_to_${DATABASE_VER_NUM}.sh"
1044 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to upgrade" >&2 && exit -1
1045 #$FILE_ || exit -1 # if fail return
1046 done
1047
1048 #DOWNGRADE DATABASE step by step
1049 while [ $DB_VERSION -lt $DATABASE_VER_NUM ]
1050 do
1051 echo " downgrade database from version '$DATABASE_VER_NUM' to '$((DATABASE_VER_NUM-1))'"
1052 #FILE_="${DIRNAME}/downgrade_from_${DATABASE_VER_NUM}.sh"
1053 #[ ! -x "$FILE_" ] && echo "Error, can not find script '$FILE_' to downgrade" >&2 && exit -1
1054 #$FILE_ || exit -1 # if fail return
1055 downgrade_from_${DATABASE_VER_NUM}
1056 DATABASE_VER_NUM=$((DATABASE_VER_NUM-1))
1057 done
1058
1059 #echo done
1060