From 38ca01fe0d54183a63fd585f9ed8c3c7378c874f Mon Sep 17 00:00:00 2001 From: spinnakerbot Date: Tue, 16 Jul 2019 10:13:06 -0400 Subject: [PATCH] fix(core): Render templated pipeline params in the pipeline run stage (#7228) (#7231) https://github.com/spinnaker/spinnaker/issues/4623 --- .../config/stages/pipeline/pipelineStage.js | 80 +++++++++++-------- .../src/pipeline/config/templates/index.ts | 2 + .../modules/core/src/pipeline/index.ts | 2 +- 3 files changed, 51 insertions(+), 33 deletions(-) create mode 100644 app/scripts/modules/core/src/pipeline/config/templates/index.ts diff --git a/app/scripts/modules/core/src/pipeline/config/stages/pipeline/pipelineStage.js b/app/scripts/modules/core/src/pipeline/config/stages/pipeline/pipelineStage.js index 40cdb088486..51e53cc4668 100644 --- a/app/scripts/modules/core/src/pipeline/config/stages/pipeline/pipelineStage.js +++ b/app/scripts/modules/core/src/pipeline/config/stages/pipeline/pipelineStage.js @@ -10,6 +10,8 @@ import { Registry } from 'core/registry'; import { ExecutionDetailsTasks } from '../common'; import { PipelineStageExecutionDetails } from './PipelineStageExecutionDetails'; import { PipelineParametersExecutionDetails } from './PipelineParametersExecutionDetails'; +import { PipelineTemplateReader, PipelineTemplateV2Service } from 'core/pipeline'; +import { SETTINGS } from 'core/config'; module.exports = angular .module('spinnaker.core.pipeline.stage.pipelineStage', []) @@ -90,45 +92,59 @@ module.exports = angular if ($scope.stage && $scope.stage.application && pipeline) { const config = _.find($scope.pipelines, pipeline => pipeline.id === $scope.stage.pipeline); - if (config && config.parameterConfig) { - if (!$scope.stage.pipelineParameters) { - $scope.stage.pipelineParameters = {}; - } - $scope.pipelineParameters = config.parameterConfig; - $scope.pipelineParameters.forEach(parameterConfig => { - if ( - parameterConfig.default && - parameterConfig.options && - !parameterConfig.options.some(option => option.value === parameterConfig.default) - ) { - parameterConfig.options.unshift({ value: parameterConfig.default }); - } - }); - $scope.userSuppliedParameters = $scope.stage.pipelineParameters; - - if ($scope.pipelineParameters) { - const acceptedPipelineParams = $scope.pipelineParameters.map(param => param.name); - $scope.invalidParameters = pickBy( - $scope.userSuppliedParameters, - (value, name) => !acceptedPipelineParams.includes(name), - ); - } - - $scope.hasInvalidParameters = () => Object.keys($scope.invalidParameters || {}).length; - $scope.useDefaultParameters = {}; - _.each($scope.pipelineParameters, function(property) { - if (!(property.name in $scope.stage.pipelineParameters) && property.default !== null) { - $scope.useDefaultParameters[property.name] = true; - } - }); + if ( + SETTINGS.feature.managedPipelineTemplatesV2UI && + config && + PipelineTemplateV2Service.isV2PipelineConfig(config) + ) { + PipelineTemplateReader.getPipelinePlan(config) + .then(plan => applyPipelineConfigParameters(plan)) + .catch(() => clearParams()); } else { - clearParams(); + applyPipelineConfigParameters(config); } } else { clearParams(); } } + function applyPipelineConfigParameters(config) { + if (config && config.parameterConfig) { + if (!$scope.stage.pipelineParameters) { + $scope.stage.pipelineParameters = {}; + } + $scope.pipelineParameters = config.parameterConfig; + $scope.pipelineParameters.forEach(parameterConfig => { + if ( + parameterConfig.default && + parameterConfig.options && + !parameterConfig.options.some(option => option.value === parameterConfig.default) + ) { + parameterConfig.options.unshift({ value: parameterConfig.default }); + } + }); + $scope.userSuppliedParameters = $scope.stage.pipelineParameters; + + if ($scope.pipelineParameters) { + const acceptedPipelineParams = $scope.pipelineParameters.map(param => param.name); + $scope.invalidParameters = pickBy( + $scope.userSuppliedParameters, + (value, name) => !acceptedPipelineParams.includes(name), + ); + } + + $scope.hasInvalidParameters = () => Object.keys($scope.invalidParameters || {}).length; + $scope.useDefaultParameters = {}; + _.each($scope.pipelineParameters, function(property) { + if (!(property.name in $scope.stage.pipelineParameters) && property.default !== null) { + $scope.useDefaultParameters[property.name] = true; + } + }); + } else { + clearParams(); + } + } + function clearParams() { $scope.pipelineParameters = {}; $scope.useDefaultParameters = {}; diff --git a/app/scripts/modules/core/src/pipeline/config/templates/index.ts b/app/scripts/modules/core/src/pipeline/config/templates/index.ts new file mode 100644 index 00000000000..13244b0fe8f --- /dev/null +++ b/app/scripts/modules/core/src/pipeline/config/templates/index.ts @@ -0,0 +1,2 @@ +export * from './v2/pipelineTemplateV2.service'; +export * from './PipelineTemplateReader'; diff --git a/app/scripts/modules/core/src/pipeline/index.ts b/app/scripts/modules/core/src/pipeline/index.ts index 332831ea217..abb52088981 100644 --- a/app/scripts/modules/core/src/pipeline/index.ts +++ b/app/scripts/modules/core/src/pipeline/index.ts @@ -6,7 +6,7 @@ export * from './config/stages/common'; export * from './config/stages/FormikStageConfig'; export * from './config/stages/stageConstants'; export * from './config/stages/templates'; -export * from './config/templates/v2/pipelineTemplateV2.service'; +export * from './config/templates'; export * from './config/triggers/BaseTrigger'; export * from './config/triggers/RunAsUser'; export * from './config/validation/PipelineConfigValidator';