Bug 2316: Fix for Unable to do vertical scaling when VM is in Shutdown state
[osm/RO.git] / RO-VIM-openstack / osm_rovim_openstack / vimconn_openstack.py
index 54d0e88..85ef2ca 100644 (file)
@@ -3376,6 +3376,12 @@ class vimconnector(vimconn.VimConnector):
         if "start" in action_dict:
             if action_dict["start"] == "rebuild":
                 server.rebuild()
+                vm_state = self.__wait_for_vm(vm_id, "ACTIVE")
+                if not vm_state:
+                    raise nvExceptions.BadRequest(
+                        409,
+                        message="Cannot 'REBUILD' vm_state is in ERROR",
+                    )
             else:
                 if server.status == "PAUSED":
                     server.unpause()
@@ -3383,6 +3389,12 @@ class vimconnector(vimconn.VimConnector):
                     server.resume()
                 elif server.status == "SHUTOFF":
                     server.start()
+                    vm_state = self.__wait_for_vm(vm_id, "ACTIVE")
+                    if not vm_state:
+                        raise nvExceptions.BadRequest(
+                            409,
+                            message="Cannot 'START' vm_state is in ERROR",
+                        )
                 else:
                     self.logger.debug(
                         "ERROR : Instance is not in SHUTOFF/PAUSE/SUSPEND state"
@@ -3399,6 +3411,12 @@ class vimconnector(vimconn.VimConnector):
             self.logger.debug("server status %s", server.status)
             if server.status == "ACTIVE":
                 server.stop()
+                vm_state = self.__wait_for_vm(vm_id, "SHUTOFF")
+                if not vm_state:
+                    raise nvExceptions.BadRequest(
+                        409,
+                        message="Cannot 'STOP' vm_state is in ERROR",
+                    )
             else:
                 self.logger.debug("ERROR: VM is not in Active state")
                 raise vimconn.VimConnException(
@@ -4514,7 +4532,9 @@ class vimconnector(vimconn.VimConnector):
                 self.nova.servers.resize(server=vm_id, flavor=new_flavor_id)
                 vm_state = self.__wait_for_vm(vm_id, "VERIFY_RESIZE")
                 if vm_state:
-                    instance_resized_status = self.confirm_resize(vm_id)
+                    instance_resized_status = self.confirm_resize(
+                        vm_id, instance_status
+                    )
                     return instance_resized_status
                 else:
                     raise nvExceptions.BadRequest(
@@ -4529,7 +4549,7 @@ class vimconnector(vimconn.VimConnector):
                 message="Cannot 'resize' instance while it is in vm_state resized",
             )
 
-    def confirm_resize(self, vm_id):
+    def confirm_resize(self, vm_id, instance_state):
         """
         Confirm the resize of an instance
         param:
@@ -4538,7 +4558,7 @@ class vimconnector(vimconn.VimConnector):
         self._reload_connection()
         self.nova.servers.confirm_resize(server=vm_id)
         if self.get_vdu_state(vm_id)[0] == "VERIFY_RESIZE":
-            self.__wait_for_vm(vm_id, "ACTIVE")
+            self.__wait_for_vm(vm_id, instance_state)
         instance_status = self.get_vdu_state(vm_id)[0]
         return instance_status