def vm_action(self, dom_id, node_id, action, date=None, time=None): self.authenticate() try: dom = DBSession().query(VM).filter(VM.id == dom_id).one() tasks = DBSession.query(Task).filter(Task.task_id.in_([dom.start_taskid, dom.shutdown_taskid])).all() if len(tasks) > 0 and len(tasks[0].result) == 0 and action == tasks[0].name: self.tc.delete_task([tasks[0].task_id]) result = to_str(self.tc.vm_action(session['auth'], dom_id, node_id, action, date, time)) wait_time = None if action == constants.START: dom.start_taskid = result wait_time = dom.get_wait_time('view_console') else: if action == constants.SHUTDOWN: dom.shutdown_taskid = result DBSession.add(dom) except Exception as ex: print_traceback() return dict(success=False, msg=to_str(ex)) return dict(success=True, msg='Task submitted.', taskid=result, wait_time=wait_time)