示例#1
0
文件: ManagedNode.py 项目: smarkm/ovm
    def sync_task(self, auth, type, logger=None):
        from sqlalchemy.orm import eagerload
        from stackone.model.services import Task
        from stackone.viewModel.TaskCreator import TaskCreator
        tc = TaskCreator()
        boot_time = self.get_boot_time()
        msg = {Task.STARTED:' is not completed in '+str(boot_time)+ 'seconds',\
            Task.FAILED:' failed.',Task.CANCELED:' canceled.',Task.SUCCEEDED:' succeeded.',\
            }
        if not logger:
            logger = LOGGER

        result_flags = {}
        logger.info('Submitting ' + str(type) + ' Sync task for ' + self.hostname)
        nw_task = tc.server_sync_task(auth,self.id,type,True)
        task_ids = [nw_task]
        result_flags['flag'+str(nw_task)] = Task.STARTED
        
        result = False
        for i in range(0, boot_time):
            time.sleep(3)
            transaction.begin()
            tasks = DBSession.query(Task).filter(Task.task_id.in_(task_ids)).options(eagerload('result')).all()
            for task in tasks:
                if task.is_finished():
                    result_flags['flag'+str(task.task_id)] = task.result[0].status
                    if task.result[0].status == Task.SUCCEEDED:
                        result = True
                    task_ids.remove(task.task_id)
            if len(task_ids) == 0:
                transaction.commit()
                break
            transaction.commit()
        nw_msg = str(type) + ' syncing task(id:' + str(nw_task) + ') for ' + self.hostname + msg[result_flags['flag'+ str(nw_task)]]
        logger.info(nw_msg)
        return result