|
16 | 16 | -- under the License. |
17 | 17 |
|
18 | 18 | -- Schema upgrade from 4.20.0.7 to 4.20.0.8 |
| 19 | + |
| 20 | +-- Fix backup details |
| 21 | + |
| 22 | +ALTER TABLE backup_details MODIFY value TEXT NOT NULL; |
| 23 | + |
| 24 | +DELETE FROM `cloud`.`backup_details` |
| 25 | + WHERE `name`='nics' |
| 26 | + AND NOT JSON_VALID(`value`) |
| 27 | + AND `backup_id` IN ( |
| 28 | + SELECT b.id |
| 29 | + FROM `cloud`.`backups` b JOIN `cloud`.`vm_instance` vm ON b.vm_id = vm.id |
| 30 | + WHERE vm.removed IS NOT NULL); |
| 31 | + |
| 32 | +DROP PROCEDURE IF EXISTS NormalizeNicDetails; |
| 33 | +CREATE PROCEDURE NormalizeNicDetails() |
| 34 | +BEGIN |
| 35 | + DECLARE nics_json JSON; |
| 36 | + DECLARE nic_json JSON; |
| 37 | + FOR vm IN ( |
| 38 | + SELECT DISTINCT vm_id |
| 39 | + FROM `cloud`.`backups` b |
| 40 | + JOIN `cloud`.`backup_details` bd ON b.id = bd.`backup_id` |
| 41 | + WHERE bd.`name` = 'nics' |
| 42 | + AND NOT JSON_VALID(bd.`value`) |
| 43 | + AND b.`removed` IS NULL |
| 44 | + ) DO |
| 45 | + SET nics_json = JSON_ARRAY(); |
| 46 | + FOR nic IN ( |
| 47 | + SELECT net.`uuid` AS network_uuid, n.`ip4_address`, n.`ip6_address`, n.`mac_address` |
| 48 | + FROM `cloud`.`nics` n JOIN `cloud`.`networks` net ON n.network_id = net.id |
| 49 | + WHERE n.instance_id = vm.vm_id AND n.removed IS NULL |
| 50 | + ) DO |
| 51 | + SET nic_json = JSON_OBJECT(); |
| 52 | + IF nic.network_uuid IS NOT NULL THEN |
| 53 | + SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('networkid', nic.network_uuid)); |
| 54 | + END IF; |
| 55 | + IF nic.ip4_address IS NOT NULL THEN |
| 56 | + SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('ipaddress', nic.ip4_address)); |
| 57 | + END IF; |
| 58 | + IF nic.ip6_address IS NOT NULL THEN |
| 59 | + SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('ip6address', nic.ip6_address)); |
| 60 | + END IF; |
| 61 | + IF nic.mac_address IS NOT NULL THEN |
| 62 | + SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('macaddress', nic.mac_address)); |
| 63 | + END IF; |
| 64 | + SET nics_json = JSON_ARRAY_APPEND(nics_json, '$', nic_json); |
| 65 | + END FOR; |
| 66 | + UPDATE `cloud`.`backup_details` |
| 67 | + SET `value` = REPLACE(REPLACE(REPLACE(nics_json,'\\',''), '"{', '{'), '}"', '}') |
| 68 | + WHERE name = 'nics' AND `backup_id` IN (SELECT id FROM `cloud`.`backups` bs WHERE bs.vm_id = vm.vm_id); |
| 69 | + END FOR; |
| 70 | +END; |
| 71 | +CALL NormalizeNicDetails(); |
| 72 | +DROP NormalizeNicDetails(); |
| 73 | + |
| 74 | +DROP PROCEDURE IF EXISTS NormalizeVmSettings; |
| 75 | +CREATE PROCEDURE NormalizeVmSettings () |
| 76 | +BEGIN |
| 77 | + DECLARE settings JSON; |
| 78 | + FOR vm IN ( |
| 79 | + SELECT DISTINCT `vm_id` |
| 80 | + FROM `cloud`.`backups` b JOIN `cloud`.`backup_details` bd ON b.`id` = bd.`backup_id` |
| 81 | + WHERE bd.`name` ='vmsettings' |
| 82 | + AND NOT JSON_VALID(bd.`value`) |
| 83 | + ) DO |
| 84 | + SET settings = JSON_OBJECT(); |
| 85 | + FOR detail IN ( |
| 86 | + SELECT `name`, `value` |
| 87 | + FROM `user_vm_details` uvd |
| 88 | + WHERE uvd.`vm_id` = vm.`vm_id` |
| 89 | + ) DO |
| 90 | + SET settings = JSON_MERGE(settings, JSON_OBJECT(detail.name, detail.value)); |
| 91 | + END FOR; |
| 92 | + UPDATE `cloud`.`backup_details` |
| 93 | + SET `value`=settings |
| 94 | + WHERE `name` = "vmsettings" |
| 95 | + AND `backup_id` IN ( |
| 96 | + SELECT `id` |
| 97 | + FROM `cloud`.`backups` bs |
| 98 | + WHERE bs.vm_id = vm.vm_id); |
| 99 | + END FOR; |
| 100 | +END; |
| 101 | +CALL NormalizeVmSettings(); |
| 102 | +DROP NormalizeVmSettings(); |
0 commit comments