def wait_for_task(self, task, logger, action_name='job', hide_result=False, cancellation_context=None):
        """
        Waits and provides updates on a vSphere task
        :param cancellation_context: package.cloudshell.cp.vcenter.models.QualiDriverModels.CancellationContext
        :param task:
        :param action_name:
        :param hide_result:
        :param logger:
        """

        while task.info.state in [vim.TaskInfo.State.running, vim.TaskInfo.State.queued]:
            time.sleep(2)
            if cancellation_context is not None and task.info.cancelable and cancellation_context.is_cancelled and not task.info.cancelled:
                # some times the cancel operation doesn't really cancel the task
                # so consider an additional handling of the canceling
                task.CancelTask()
                logger.info("SynchronousTaskWaiter: task.CancelTask() " + str(task.info.name.info.name))
                logger.info("SynchronousTaskWaiter: task.info.cancelled " + str(task.info.cancelled))
                logger.info("SynchronousTaskWaiter: task.info.state " + str(task.info.state))

        if task.info.state == vim.TaskInfo.State.success:
            if task.info.result is not None and not hide_result:
                out = '%s completed successfully, result: %s' % (action_name, task.info.result)
                logger.info(out)
            else:
                out = '%s completed successfully.' % action_name
                logger.info(out)
        else:  # error state
            multi_msg = ''
            if task.info.error.faultMessage:
                multi_msg = ', '.join([err.message for err in task.info.error.faultMessage])
            elif task.info.error.msg:
                multi_msg = task.info.error.msg

            logger.info("task execution failed due to: {}".format(multi_msg))
            logger.info("task info dump: {0}".format(task.info))
            
            raise TaskFaultException(multi_msg)

        return task.info.result
def wait_for_task ( self , task , logger , action_name = 'job' , hide_result = False , cancellation_context = None ) : while task . info . state in [ vim . TaskInfo . State . running , vim . TaskInfo . State . queued ] : time . sleep ( 2 ) if cancellation_context is not None and task . info . cancelable and cancellation_context . is_cancelled and not task . info . cancelled : task . CancelTask ( ) logger . info ( "SynchronousTaskWaiter: task.CancelTask() " + str ( task . info . name . info . name ) ) logger . info ( "SynchronousTaskWaiter: task.info.cancelled " + str ( task . info . cancelled ) ) logger . info ( "SynchronousTaskWaiter: task.info.state " + str ( task . info . state ) ) if task . info . state == vim . TaskInfo . State . success : if task . info . result is not None and not hide_result : out = '%s completed successfully, result: %s' % ( action_name , task . info . result ) logger . info ( out ) else : out = '%s completed successfully.' % action_name logger . info ( out ) else : multi_msg = '' if task . info . error . faultMessage : multi_msg = ', ' . join ( [ err . message for err in task . info . error . faultMessage ] ) elif task . info . error . msg : multi_msg = task . info . error . msg logger . info ( "task execution failed due to: {}" . format ( multi_msg ) ) logger . info ( "task info dump: {0}" . format ( task . info ) ) raise TaskFaultException ( multi_msg ) return task . info . result
Waits and provides updates on a vSphere task
        :param cancellation_context: package.cloudshell.cp.vcenter.models.QualiDriverModels.CancellationContext
        :param task:
        :param action_name:
        :param hide_result:
        :param logger: