Feature 10909: Heal operation for VDU
Change-Id: I4f15fca7874cfc443f09fa65855579e1318a899d
Signed-off-by: gallardo <sgallardor@indra.es>
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
Signed-off-by: palaciosj <jmpalacios@indra.es>
diff --git a/RO-VIM-openstack/osm_rovim_openstack/vimconn_openstack.py b/RO-VIM-openstack/osm_rovim_openstack/vimconn_openstack.py
index 8f96f6b..4900dfc 100644
--- a/RO-VIM-openstack/osm_rovim_openstack/vimconn_openstack.py
+++ b/RO-VIM-openstack/osm_rovim_openstack/vimconn_openstack.py
@@ -1866,6 +1866,7 @@
config_drive, userdata = self._create_user_data(cloud_config)
# Create additional volumes in case these are present in disk_list
+ existing_vim_volumes = []
base_disk_index = ord("b")
boot_volume_id = None
if disk_list:
@@ -1875,6 +1876,7 @@
block_device_mapping["_vd" + chr(base_disk_index)] = disk[
"vim_id"
]
+ existing_vim_volumes.append({"id": disk["vim_id"]})
else:
if "image_id" in disk:
base_disk_index = ord("a")
@@ -1909,6 +1911,17 @@
time.sleep(5)
elapsed_time += 5
+ # Wait until existing volumes in vim are with status available
+ while elapsed_time < volume_timeout:
+ for volume in existing_vim_volumes:
+ if self.cinder.volumes.get(volume["id"]).status != "available":
+ break
+ else: # all ready: break from while
+ break
+
+ time.sleep(5)
+ elapsed_time += 5
+
# If we exceeded the timeout rollback
if elapsed_time >= volume_timeout:
raise vimconn.VimConnException(
@@ -2241,7 +2254,7 @@
) as e:
self._format_exception(e)
- def delete_vminstance(self, vm_id, created_items=None):
+ def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
"""Removes a VM instance from VIM. Returns the old identifier"""
# print "osconnector: Getting VM from VIM"
if created_items is None:
@@ -2291,8 +2304,9 @@
if self.cinder.volumes.get(k_id).status != "available":
keep_waiting = True
else:
- self.cinder.volumes.delete(k_id)
- created_items[k] = None
+ if k_id not in volumes_to_hold:
+ self.cinder.volumes.delete(k_id)
+ created_items[k] = None
elif k_item == "floating_ip": # floating ip
self.neutron.delete_floatingip(k_id)
created_items[k] = None