def run_agent(self, workspace_name, agent_id): try: validate_csrf(request.form.get('csrf_token')) except wtforms.ValidationError: abort(403) agent = self._get_object(agent_id, workspace_name) changes_queue.put({ 'agent_id': agent.id, 'action': 'RUN', }) return 'OK'
def run_agent(self, workspace_name, agent_id): """ --- tags: ["Agent"] description: Runs an agent responses: 400: description: Bad request 201: description: Ok content: application/json: schema: AgentSchema """ if flask.request.content_type != 'application/json': abort(400, "Only application/json is a valid content-type") data = self._parse_data(AgentRunSchema(unknown=EXCLUDE), request) agent = self._get_object(agent_id, workspace_name) workspace = self._get_workspace(workspace_name) executor_data = data['executorData'] try: executor = Executor.query.filter( Executor.name == executor_data['executor'], Executor.agent_id == agent_id).one() agent_execution = AgentExecution( running=None, successful=None, message='', executor=executor, workspace_id=workspace.id, parameters_data=executor_data["args"]) db.session.add(agent_execution) db.session.commit() changes_queue.put({ 'execution_id': agent_execution.id, 'agent_id': agent.id, 'workspace': agent_execution.workspace.name, 'action': 'RUN', "executor": executor_data.get('executor'), "args": executor_data.get('args') }) except NoResultFound as e: logger.exception(e) abort(400, "Can not find an agent execution with that id") return flask.jsonify({ 'successful': True, })
def run_agent(self, workspace_name, agent_id): if flask.request.content_type != 'application/json': abort(400, "Only application/json is a valid content-type") data = self._parse_data(AgentRunSchema(strict=True), request) agent = self._get_object(agent_id, workspace_name) executor_data = data['executorData'] changes_queue.put({ 'agent_id': agent.id, 'action': 'RUN', "executor": executor_data.get('executor'), "args": executor_data.get('args') }) return flask.jsonify({ 'successful': True, })
def run_agent(self, workspace_name, agent_id): """ --- tags: ["Agent"] description: Runs an agent responses: 400: description: Bad request 201: description: Ok content: application/json: schema: AgentSchema """ if flask.request.content_type != 'application/json': abort(400, "Only application/json is a valid content-type") data = self._parse_data(AgentRunSchema(unknown=EXCLUDE), request) agent = self._get_object(agent_id, workspace_name) workspace = self._get_workspace(workspace_name) executor_data = data['executorData'] try: executor = Executor.query.filter(Executor.name == executor_data['executor'], Executor.agent_id == agent_id).one() # VALIDATE errors = {} for param_name, param_data in executor_data["args"].items(): if executor.parameters_metadata.get(param_name): val_error = type_validate(executor.parameters_metadata[param_name]['type'], param_data) if val_error: errors[param_name] = val_error else: errors['message'] = f'"{param_name}" not recognized as an executor argument' if errors: response = jsonify(errors) response.status_code = 400 abort(response) params = ', '.join([f'{key}={value}' for (key, value) in executor_data["args"].items()]) command = Command( import_source="agent", tool=agent.name, command=executor.name, user='', hostname='', params=params, start_date=datetime.utcnow(), workspace=workspace ) agent_execution = AgentExecution( running=None, successful=None, message='', executor=executor, workspace_id=workspace.id, parameters_data=executor_data["args"], command=command ) executor.last_run = datetime.utcnow() db.session.add(agent_execution) db.session.commit() changes_queue.put({ 'execution_id': agent_execution.id, 'agent_id': agent.id, 'workspace': agent_execution.workspace.name, 'action': 'RUN', "executor": executor_data.get('executor'), "args": executor_data.get('args') }) except NoResultFound as e: logger.exception(e) abort(400, "Can not find an agent execution with that id") else: return flask.jsonify({ 'command_id': command.id, })