From a98f4e1cd680b90ce99789ece40a67fd0212e64a Mon Sep 17 00:00:00 2001 From: Dan Hermann Date: Mon, 8 Mar 2021 07:48:40 -0600 Subject: [PATCH] Summary option for listing ingest pipelines without their definitions (#69756) --- .../api/ingest.get_pipeline.json | 4 +++ .../rest-api-spec/test/ingest/10_basic.yml | 32 +++++++++++++++++++ .../action/ingest/GetPipelineRequest.java | 19 +++++++++-- .../action/ingest/GetPipelineResponse.java | 19 +++++++++-- .../ingest/GetPipelineTransportAction.java | 2 +- .../action/ingest/RestGetPipelineAction.java | 5 ++- 6 files changed, 75 insertions(+), 6 deletions(-) diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/ingest.get_pipeline.json b/rest-api-spec/src/main/resources/rest-api-spec/api/ingest.get_pipeline.json index c438c3bd70172..d6d408eafb85b 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/ingest.get_pipeline.json +++ b/rest-api-spec/src/main/resources/rest-api-spec/api/ingest.get_pipeline.json @@ -32,6 +32,10 @@ ] }, "params":{ + "summary":{ + "type":"boolean", + "description":"Return pipelines without their definitions (default: false)" + }, "master_timeout":{ "type":"time", "description":"Explicit operation timeout for connection to master node" diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/ingest/10_basic.yml b/rest-api-spec/src/main/resources/rest-api-spec/test/ingest/10_basic.yml index e5b9b0fd5ebca..4f07120334511 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/ingest/10_basic.yml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/ingest/10_basic.yml @@ -152,3 +152,35 @@ "processors": [], "invalid_field" : {} } + +--- +"Test Get Summarized Pipelines": + - skip: + version: " - 7.99.99" + reason: "change to appropriate 7.x release after backport" + + - do: + ingest.put_pipeline: + id: "first_pipeline" + body: > + { + "description": "first", + "processors": [] + } + - do: + ingest.put_pipeline: + id: "second_pipeline" + body: > + { + "description": "second", + "processors": [] + } + + - do: + ingest.get_pipeline: + summary: true + + - is_true: first_pipeline + - is_false: first_pipeline.description + - is_true: second_pipeline + - is_false: second_pipeline.description diff --git a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineRequest.java b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineRequest.java index 73a7c702fa9a2..08b213b668ff9 100644 --- a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineRequest.java +++ b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineRequest.java @@ -8,6 +8,7 @@ package org.elasticsearch.action.ingest; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionRequestValidationException; import org.elasticsearch.action.support.master.MasterNodeReadRequest; import org.elasticsearch.common.Strings; @@ -19,33 +20,47 @@ public class GetPipelineRequest extends MasterNodeReadRequest { private String[] ids; + private final boolean summary; - public GetPipelineRequest(String... ids) { + public GetPipelineRequest(boolean summary, String... ids) { if (ids == null) { throw new IllegalArgumentException("ids cannot be null"); } this.ids = ids; + this.summary = summary; + } + + public GetPipelineRequest(String... ids) { + this(false, ids); } GetPipelineRequest() { - this.ids = Strings.EMPTY_ARRAY; + this(false, Strings.EMPTY_ARRAY); } public GetPipelineRequest(StreamInput in) throws IOException { super(in); ids = in.readStringArray(); + summary = in.getVersion().onOrAfter(Version.V_8_0_0) ? in.readBoolean() : false; } @Override public void writeTo(StreamOutput out) throws IOException { super.writeTo(out); out.writeStringArray(ids); + if (out.getVersion().onOrAfter(Version.V_8_0_0)) { + out.writeBoolean(summary); + } } public String[] getIds() { return ids; } + public boolean isSummary() { + return summary; + } + @Override public ActionRequestValidationException validate() { return null; diff --git a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineResponse.java b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineResponse.java index ea9827a9ca6f7..bd0f9fe1c1eaf 100644 --- a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineResponse.java +++ b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineResponse.java @@ -8,6 +8,7 @@ package org.elasticsearch.action.ingest; +import org.elasticsearch.Version; import org.elasticsearch.action.ActionResponse; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; @@ -32,6 +33,7 @@ public class GetPipelineResponse extends ActionResponse implements StatusToXContentObject { private List pipelines; + private final boolean summary; public GetPipelineResponse(StreamInput in) throws IOException { super(in); @@ -40,10 +42,16 @@ public GetPipelineResponse(StreamInput in) throws IOException { for (int i = 0; i < size; i++) { pipelines.add(PipelineConfiguration.readFrom(in)); } + summary = in.getVersion().onOrAfter(Version.V_8_0_0) ? in.readBoolean() : false; } - public GetPipelineResponse(List pipelines) { + public GetPipelineResponse(List pipelines, boolean summary) { this.pipelines = pipelines; + this.summary = summary; + } + + public GetPipelineResponse(List pipelines) { + this(pipelines, false); } /** @@ -61,12 +69,19 @@ public void writeTo(StreamOutput out) throws IOException { for (PipelineConfiguration pipeline : pipelines) { pipeline.writeTo(out); } + if (out.getVersion().onOrAfter(Version.V_8_0_0)) { + out.writeBoolean(summary); + } } public boolean isFound() { return pipelines.isEmpty() == false; } + public boolean isSummary() { + return summary; + } + @Override public RestStatus status() { return isFound() ? RestStatus.OK : RestStatus.NOT_FOUND; @@ -76,7 +91,7 @@ public RestStatus status() { public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { builder.startObject(); for (PipelineConfiguration pipeline : pipelines) { - builder.field(pipeline.getId(), pipeline.getConfigAsMap()); + builder.field(pipeline.getId(), summary ? Map.of() : pipeline.getConfigAsMap()); } builder.endObject(); return builder; diff --git a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineTransportAction.java b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineTransportAction.java index e9308d05f49fa..6ec8912b67de0 100644 --- a/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineTransportAction.java +++ b/server/src/main/java/org/elasticsearch/action/ingest/GetPipelineTransportAction.java @@ -34,7 +34,7 @@ public GetPipelineTransportAction(ThreadPool threadPool, ClusterService clusterS @Override protected void masterOperation(GetPipelineRequest request, ClusterState state, ActionListener listener) throws Exception { - listener.onResponse(new GetPipelineResponse(IngestService.getPipelines(state, request.getIds()))); + listener.onResponse(new GetPipelineResponse(IngestService.getPipelines(state, request.getIds()), request.isSummary())); } @Override diff --git a/server/src/main/java/org/elasticsearch/rest/action/ingest/RestGetPipelineAction.java b/server/src/main/java/org/elasticsearch/rest/action/ingest/RestGetPipelineAction.java index e43c5e28575e3..4c13c9bea0363 100644 --- a/server/src/main/java/org/elasticsearch/rest/action/ingest/RestGetPipelineAction.java +++ b/server/src/main/java/org/elasticsearch/rest/action/ingest/RestGetPipelineAction.java @@ -38,7 +38,10 @@ public String getName() { @Override public RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) throws IOException { - GetPipelineRequest request = new GetPipelineRequest(Strings.splitStringByCommaToArray(restRequest.param("id"))); + GetPipelineRequest request = new GetPipelineRequest( + restRequest.paramAsBoolean("summary", false), + Strings.splitStringByCommaToArray(restRequest.param("id")) + ); request.masterNodeTimeout(restRequest.paramAsTime("master_timeout", request.masterNodeTimeout())); return channel -> client.admin().cluster().getPipeline(request, new RestStatusToXContentListener<>(channel)); }