Пример #1
0
 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'
Пример #2
0
    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,
        })
Пример #3
0
 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,
     })
Пример #4
0
    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,
            })