From bce489eb868b2e4215e3264f7ba39c3fd1b1f2f9 Mon Sep 17 00:00:00 2001 From: Adam Jordens Date: Wed, 3 Jul 2019 15:07:08 -0700 Subject: [PATCH] feat(core): Support deserializing `Execution.initialConfig` (#3019) Also adds support for using `initialConfig.enabled` as a short circuit of the `EnabledPipelineValidator` check. This seems reasonable as a user can already submit pipeline json against an arbitrary pipeline config id (that may or may not exist). Providing an ability to explicitly override the enabled check seems harmless. --- .../spinnaker/orca/pipeline/ExecutionLauncher.java | 1 + .../netflix/spinnaker/orca/pipeline/model/Execution.java | 4 ++-- .../spinnaker/orca/pipeline/model/PipelineBuilder.java | 9 +++++++++ .../orca/front50/pipeline/EnabledPipelineValidator.java | 6 ++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/ExecutionLauncher.java b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/ExecutionLauncher.java index a41be86b67..a09b601796 100644 --- a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/ExecutionLauncher.java +++ b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/ExecutionLauncher.java @@ -206,6 +206,7 @@ private Execution parsePipeline(String configJson) throws IOException { .withLimitConcurrent(getBoolean(config, "limitConcurrent")) .withKeepWaitingPipelines(getBoolean(config, "keepWaitingPipelines")) .withNotifications((List>) config.get("notifications")) + .withInitialConfig((Map) config.get("initialConfig")) .withOrigin(getString(config, "origin")) .withStartTimeExpiry(getString(config, "startTimeExpiry")) .withSource( diff --git a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/Execution.java b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/Execution.java index 7fd282543f..d49facf4e7 100644 --- a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/Execution.java +++ b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/Execution.java @@ -292,9 +292,9 @@ public void setSource(@Nullable PipelineSource source) { return notifications; } - private final Map initialConfig = new HashMap<>(); + private final Map initialConfig = new HashMap<>(); - public @Nonnull Map getInitialConfig() { + public @Nonnull Map getInitialConfig() { return initialConfig; } diff --git a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/PipelineBuilder.java b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/PipelineBuilder.java index 6f751f32d3..de2dce4683 100644 --- a/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/PipelineBuilder.java +++ b/orca-core/src/main/java/com/netflix/spinnaker/orca/pipeline/model/PipelineBuilder.java @@ -50,6 +50,15 @@ public PipelineBuilder withNotifications(List> notifications return this; } + public PipelineBuilder withInitialConfig(Map initialConfig) { + pipeline.getInitialConfig().clear(); + if (initialConfig != null) { + pipeline.getInitialConfig().putAll(initialConfig); + } + + return this; + } + public PipelineBuilder withPipelineConfigId(String id) { pipeline.setPipelineConfigId(id); return this; diff --git a/orca-front50/src/main/groovy/com/netflix/spinnaker/orca/front50/pipeline/EnabledPipelineValidator.java b/orca-front50/src/main/groovy/com/netflix/spinnaker/orca/front50/pipeline/EnabledPipelineValidator.java index fbe9a77f05..ef2fcce930 100644 --- a/orca-front50/src/main/groovy/com/netflix/spinnaker/orca/front50/pipeline/EnabledPipelineValidator.java +++ b/orca-front50/src/main/groovy/com/netflix/spinnaker/orca/front50/pipeline/EnabledPipelineValidator.java @@ -50,6 +50,12 @@ public void checkRunnable(Execution pipeline) { "Front50 not enabled, no way to validate pipeline. Fix this by setting front50.enabled: true"); } + Boolean isExplicitlyEnabled = + (Boolean) pipeline.getInitialConfig().getOrDefault("enabled", false); + if (isExplicitlyEnabled) { + return; + } + if (!isStrategy(pipeline)) { try { // attempt an optimized lookup via pipeline history vs fetching all pipelines for the