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
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
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