Exemplo n.º 1
0
    def test_validate_playbook_with_good_data(self):
        """
        Verify validate_playbook does not raise when good data is passed in
        """
        top = {
            'group': 'p',
            'name': 'myplaybook',
            'execution': [{
                'description': 'something',
                'hosts': ['127.0.0.1'],
                'steps': [{"service:Restart": {"service": "httpd"}}]
            }]

        }
        assert validate_playbook(top) is None

        w_steps = top
        # Additional bjects as steps should be valid
        w_steps['execution'].append({
            'description': 'second',
            'hosts': ['127.0.0.1'],
            'steps': [{"service:Restart": {"service": "httpd"}}]})

        # A string as a step should be valid
        w_steps['execution'][0]['steps'].append("do:SomethingAsString")

        assert validate_playbook(w_steps) is None

        # Preflight is optional but should be allowed
        w_steps['execution'][0]['preflight'] = [
            'something:ToDo', {'another:Item': {'with': 'parameters'}}]
        assert validate_playbook(w_steps) is None
Exemplo n.º 2
0
    def put(self, group):
        """
        Creates a new playbook for a group.
        """
        # Serializer so we can handle json and yaml
        serializer = serialize.Serialize(request.args.get(
            'format', 'json'))

        ContextFilter.set_field('user_id', request.remote_user)
        # Gets the formatter info
        current_app.logger.info(
            'Creating a new playbook for group %s by user %s. '
            'Request id: %s' % (
                group, request.remote_user, request.request_id))

        try:
            playbook = serializer.load(request.data)
            validate_playbook(playbook)
            playbook["group"] = str(group)
            id = g.db.re.playbooks.insert(playbook)

            return jsonify({'status': 'created', 'id': str(id)}), 201
        except (KeyError, ValueError), ke:
            return jsonify(
                {'status': 'bad request', 'message': str(ke)}), 400
Exemplo n.º 3
0
    def post(self, group, id):
        """
        Replaces a playbook for a group.
        """
        # Serializer so we can handle json and yaml
        serializer = serialize.Serialize(request.args.get(
            'format', 'json'))

        ContextFilter.set_field('user_id', request.remote_user)
        current_app.logger.info(
            'Updating a playbook for group %s by user %s. '
            'Request id: %s' % (
                group, request.remote_user, request.request_id))
        try:
            oid = ObjectId(id)
        except InvalidId:
            return Response(
                response=serializer.dump(
                    {'status': 'bad request', 'message': 'Bad id'}),
                status=400,
                mimetype=serializer.mimetype)

        exists = g.db.re.playbooks.find_one({"_id": oid})
        if exists:
            try:
                playbook = serializer.load(request.data)
                playbook["group"] = str(group)
                validate_playbook(playbook)
                g.db.re.playbooks.update({"_id": oid}, playbook)
                return jsonify({
                    'status': 'ok', 'id': str(exists['_id'])}), 200
            except (KeyError, ValueError), ke:
                return jsonify({
                    'status': 'bad request', 'message': str(ke)}), 400
            except ValidationError:
                current_app.logger.error("The playbook does not conform to the spec")
                return jsonify({
                    'status': 'bad request',
                    'message': ('The playbook does not '
                                'conform to the spec.')}), 400