From 7cb2fd17765aad691eda25ca4c5acecb89f84394 Mon Sep 17 00:00:00 2001 From: Daisuke Taniwaki Date: Wed, 22 Apr 2020 01:38:41 +0900 Subject: [PATCH] fix: allow non path output params (#2680) --- workflow/validate/validate.go | 9 +++++-- workflow/validate/validate_test.go | 38 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 49297480693f..15a4522e7dc2 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -923,8 +923,13 @@ func (ctx *templateValidationCtx) validateBaseImageOutputs(tmpl *wfv1.Template) } } for _, out := range tmpl.Outputs.Parameters { - if out.ValueFrom != nil && common.FindOverlappingVolume(tmpl, out.ValueFrom.Path) == nil { - return errors.Errorf(errors.CodeBadRequest, "templates.%s.outputs.parameters.%s: %s", tmpl.Name, out.Name, errMsg) + if out.ValueFrom == nil { + continue + } + if out.ValueFrom.Path != "" { + if common.FindOverlappingVolume(tmpl, out.ValueFrom.Path) == nil { + return errors.Errorf(errors.CodeBadRequest, "templates.%s.outputs.parameters.%s: %s", tmpl.Name, out.Name, errMsg) + } } } } diff --git a/workflow/validate/validate_test.go b/workflow/validate/validate_test.go index 87d6a27877f0..ec5a552dede8 100644 --- a/workflow/validate/validate_test.go +++ b/workflow/validate/validate_test.go @@ -1496,6 +1496,41 @@ spec: path: /mnt ` +var nonPathOutputParameter = ` +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: non-path-out-param- +spec: + entrypoint: non-path-out-param + templates: + - name: non-path-out-param + steps: + - - name: non-path-resource-out-param + template: non-path-resource-out-param + outputs: + parameters: + - name: param + valueFrom: + parameter: "{{steps.non-path-resource-out-param.outputs.parameters.json}}" + - name: non-path-resource-out-param + resource: + action: create + manifest: | + apiVersion: v1 + kind: ConfigMap + metadata: + name: whalesay-cm + outputs: + parameters: + - name: json + valueFrom: + jsonPath: '{.metadata.name}' + - name: jqfliter + valueFrom: + jqFilter: . +` + // TestBaseImageOutputVerify verifies we error when we detect the condition when the container // runtime executor doesn't support output artifacts from a base image layer, and fails validation func TestBaseImageOutputVerify(t *testing.T) { @@ -1503,6 +1538,7 @@ func TestBaseImageOutputVerify(t *testing.T) { wfBaseOutParam := unmarshalWf(baseImageOutputParameter) wfEmptyDirOutArt := unmarshalWf(volumeMountOutputArtifact) wfBaseWithEmptyDirOutArt := unmarshalWf(baseImageDirWithEmptyDirOutputArtifact) + wfNonPathOutputParam := unmarshalWf(nonPathOutputParameter) var err error for _, executor := range []string{common.ContainerRuntimeExecutorK8sAPI, common.ContainerRuntimeExecutorKubelet, common.ContainerRuntimeExecutorPNS, common.ContainerRuntimeExecutorDocker, ""} { @@ -1514,6 +1550,8 @@ func TestBaseImageOutputVerify(t *testing.T) { assert.Error(t, err) _, err = ValidateWorkflow(wftmplGetter, cwftmplGetter, wfBaseWithEmptyDirOutArt, ValidateOpts{ContainerRuntimeExecutor: executor}) assert.Error(t, err) + _, err = ValidateWorkflow(wftmplGetter, cwftmplGetter, wfNonPathOutputParam, ValidateOpts{ContainerRuntimeExecutor: executor}) + assert.NoError(t, err) case common.ContainerRuntimeExecutorPNS: _, err = ValidateWorkflow(wftmplGetter, cwftmplGetter, wfBaseOutArt, ValidateOpts{ContainerRuntimeExecutor: executor}) assert.NoError(t, err)