diff --git a/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js new file mode 100644 index 000000000000..7c62bb973dfa --- /dev/null +++ b/src/plugins/kibana/server/lib/converters/ingest_pipeline_api_kibana_to_es_converter.js @@ -0,0 +1,10 @@ +import _ from 'lodash'; +import * as ingestProcessorApiKibanaToEsConverters from './ingest_processor_api_kibana_to_es_converters'; + +export default function ingestPipelineApiKibanaToEsConverter(pipelineApiDocument) { + return { + processors: _.map(pipelineApiDocument, (processor) => { + return ingestProcessorApiKibanaToEsConverters[processor.type_id](processor); + }) + }; +} diff --git a/src/plugins/kibana/server/lib/converters/ingest_simulate_api_kibana_to_es_converter.js b/src/plugins/kibana/server/lib/converters/ingest_simulate_api_kibana_to_es_converter.js index 229050fd38b5..7859d21fc2e7 100644 --- a/src/plugins/kibana/server/lib/converters/ingest_simulate_api_kibana_to_es_converter.js +++ b/src/plugins/kibana/server/lib/converters/ingest_simulate_api_kibana_to_es_converter.js @@ -1,13 +1,9 @@ import _ from 'lodash'; -import * as ingestProcessorApiKibanaToEsConverters from './ingest_processor_api_kibana_to_es_converters'; +import ingestPipelineApiKibanaToEsConverter from './ingest_pipeline_api_kibana_to_es_converter'; export default function ingestSimulateApiKibanaToEsConverter(simulateApiDocument) { return { - pipeline: { - processors: _.map(simulateApiDocument.processors, (processor) => { - return ingestProcessorApiKibanaToEsConverters[processor.type_id](processor); - }) - }, + pipeline: ingestPipelineApiKibanaToEsConverter(simulateApiDocument.processors), docs: [ { _source: simulateApiDocument.input diff --git a/src/plugins/kibana/server/lib/schemas/resources/pipeline_schema.js b/src/plugins/kibana/server/lib/schemas/resources/pipeline_schema.js index 10769cbbddb0..847646a3243e 100644 --- a/src/plugins/kibana/server/lib/schemas/resources/pipeline_schema.js +++ b/src/plugins/kibana/server/lib/schemas/resources/pipeline_schema.js @@ -1,3 +1,5 @@ -const Joi = require('joi'); +import _ from 'lodash'; +import Joi from 'joi'; +import * as ingestProcessorSchemas from './ingest_processor_schemas'; -module.exports = Joi.array().items(Joi.object()); +module.exports = Joi.array().items(_.values(ingestProcessorSchemas)); diff --git a/src/plugins/kibana/server/routes/api/ingest/register_post.js b/src/plugins/kibana/server/routes/api/ingest/register_post.js index 37650776033b..b20594f1ccce 100644 --- a/src/plugins/kibana/server/routes/api/ingest/register_post.js +++ b/src/plugins/kibana/server/routes/api/ingest/register_post.js @@ -6,6 +6,7 @@ import createMappingsFromPatternFields from '../../../lib/create_mappings_from_p import initDefaultFieldProps from '../../../lib/init_default_field_props'; import {ingestToPattern, patternToIngest} from '../../../../common/lib/convert_pattern_and_ingest_name'; import { keysToCamelCaseShallow } from '../../../../common/lib/case_conversion'; +import ingestPipelineApiKibanaToEsConverter from '../../../lib/converters/ingest_pipeline_api_kibana_to_es_converter'; module.exports = function registerPost(server) { const kibanaIndex = server.config().get('kibana.index'); @@ -77,9 +78,7 @@ module.exports = function registerPost(server) { indexPattern.fields = JSON.stringify(indexPattern.fields); indexPattern.fieldFormatMap = JSON.stringify(indexPattern.fieldFormatMap); - const pipeline = { - processors: requestDocument.pipeline - }; + const pipeline = ingestPipelineApiKibanaToEsConverter(requestDocument.pipeline); // Set up call with request params const patternCreateParams = { diff --git a/test/unit/api/ingest/_post.js b/test/unit/api/ingest/_post.js index 7af56e401423..919493763a08 100644 --- a/test/unit/api/ingest/_post.js +++ b/test/unit/api/ingest/_post.js @@ -38,6 +38,11 @@ define(function (require) { // Fields must have a name and type request.post('/kibana/ingest') .send(_.set(createTestData(), 'index_pattern.fields', [{count: 0}])) + .expect(400), + + // should validate pipeline processors + request.post('/kibana/ingest') + .send(_.set(createTestData(), 'pipeline[0]', {bad: 'processor'})) .expect(400) ]); }); diff --git a/test/unit/api/ingest/data.js b/test/unit/api/ingest/data.js index f04f4175e4b2..60a7389a8682 100644 --- a/test/unit/api/ingest/data.js +++ b/test/unit/api/ingest/data.js @@ -24,13 +24,11 @@ module.exports = function createTestData() { } ] }, - pipeline: [ - { - date: { - match_field: 'initialDate', - match_formats: ['dd/MM/yyyy hh:mm:ss'] - } - } - ] + pipeline: [{ + processor_id: 'processor1', + type_id: 'set', + target_field: 'foo', + value: 'bar' + }] }; };