From 471a5d411fe33d3b4f2ea0cd0fdb454831d6133d Mon Sep 17 00:00:00 2001 From: Rob Zienert Date: Thu, 30 May 2019 10:26:05 -0700 Subject: [PATCH] feat(pipelinetriggers): Support client-provided execution ID for pipeline triggers (#563) --- .../spinnaker/echo/model/Pipeline.java | 7 +++- .../netflix/spinnaker/echo/model/Trigger.java | 14 ++++++- ...videdExecutionIdPipelinePostProcessor.java | 42 +++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/postprocessors/ProvidedExecutionIdPipelinePostProcessor.java diff --git a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java index 7a5207f5c..14c92b979 100644 --- a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java +++ b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Pipeline.java @@ -23,7 +23,10 @@ import com.netflix.spinnaker.kork.artifacts.model.ExpectedArtifact; import java.util.List; import java.util.Map; -import lombok.*; +import lombok.Builder; +import lombok.NonNull; +import lombok.ToString; +import lombok.Value; import lombok.experimental.Wither; @JsonDeserialize(builder = Pipeline.PipelineBuilder.class) @@ -42,6 +45,8 @@ public class Pipeline { @JsonProperty String id; + @JsonProperty String executionId; + @JsonProperty String executionEngine; @JsonProperty boolean parallel; diff --git a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Trigger.java b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Trigger.java index 957c7182b..c00920aae 100644 --- a/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Trigger.java +++ b/echo-model/src/main/java/com/netflix/spinnaker/echo/model/Trigger.java @@ -65,7 +65,9 @@ "link", "linkText", "application", - "pipeline" + "pipeline", + "correlationId", + "executionId" }, includeFieldNames = false) @Value @@ -106,6 +108,8 @@ public String toString() { // Configuration for pipeline triggers String application; String pipeline; + String correlationId; + String executionId; // Configuration for git triggers String project; @@ -226,6 +230,14 @@ public Trigger atEventId(final String eventId) { return this.toBuilder().eventId(eventId).build(); } + public Trigger atCorrelationId(final String correlationId) { + return this.toBuilder().correlationId(correlationId).build(); + } + + public Trigger atExecutionId(final String executionId) { + return this.toBuilder().executionId(executionId).build(); + } + public Trigger atNotifications(final List> notifications) { return this.toBuilder().notifications(notifications).build(); } diff --git a/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/postprocessors/ProvidedExecutionIdPipelinePostProcessor.java b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/postprocessors/ProvidedExecutionIdPipelinePostProcessor.java new file mode 100644 index 000000000..0dc424d78 --- /dev/null +++ b/echo-pipelinetriggers/src/main/java/com/netflix/spinnaker/echo/pipelinetriggers/postprocessors/ProvidedExecutionIdPipelinePostProcessor.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.netflix.spinnaker.echo.pipelinetriggers.postprocessors; + +import com.google.common.base.Strings; +import com.netflix.spinnaker.echo.model.Pipeline; +import com.netflix.spinnaker.echo.model.Trigger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** Automatically sets a pipeline's execution ID if one was supplied by the eventing trigger. */ +@Component +public class ProvidedExecutionIdPipelinePostProcessor implements PipelinePostProcessor { + + private final Logger log = + LoggerFactory.getLogger(ProvidedExecutionIdPipelinePostProcessor.class); + + @Override + public Pipeline processPipeline(Pipeline inputPipeline) { + Trigger trigger = inputPipeline.getTrigger(); + if (!Strings.isNullOrEmpty(trigger.getExecutionId())) { + log.debug( + "Assigning trigger-provided execution ID to pipeline: '{}'", trigger.getExecutionId()); + return inputPipeline.withExecutionId(trigger.getExecutionId()); + } + return inputPipeline; + } +}