Skip to content

Commit

Permalink
fix: wrong values are assigned to input parameters of workflowtemplat… (
Browse files Browse the repository at this point in the history
#12412)

Signed-off-by: shuangkun <tsk2013uestc@163.com>
Co-authored-by: sherwinkoo29 <sherwinkoo@163.com>
  • Loading branch information
shuangkun and sherwinkoo29 committed Jan 13, 2024
1 parent 85d1c79 commit b290e51
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 0 deletions.
2 changes: 2 additions & 0 deletions workflow/util/merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ func MergeTo(patch, target *wfv1.Workflow) error {
if err != nil {
return err
}

target.Spec = wfv1.WorkflowSpec{}
err = json.Unmarshal(mergedWfByte, target)
if err != nil {
return err
Expand Down
146 changes: 146 additions & 0 deletions workflow/util/merge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,141 @@ spec:
`

var wfArguments = `
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: test-workflow
spec:
workflowTemplateRef:
name: test-workflow-template
arguments:
parameters:
- name: PARAM1
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM1
- name: PARAM2
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM2
- name: PARAM4
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM4
- name: PARAM5
value: "Workflow value 5"`

var wfArgumentsTemplate = `
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
name: test-workflow-template
spec:
entrypoint: main
ttlStrategy:
secondsAfterCompletion: 600
secondsAfterSuccess: 600
secondsAfterFailure: 600
arguments:
parameters:
- name: PARAM1
- name: PARAM2
- name: PARAM3
value: WorkflowTemplate value 3
- name: PARAM4
- name: PARAM5
templates:
- name: main
inputs:
parameters:
- name: PARAM1
value: "{{workflow.parameters.PARAM1}}"
- name: PARAM2
value: "{{workflow.parameters.PARAM2}}"
- name: PARAM3
value: "{{workflow.parameters.PARAM3}}"
- name: PARAM4
value: "{{workflow.parameters.PARAM4}}"
- name: PARAM5
value: "{{workflow.parameters.PARAM5}}"
script:
image: busybox:latest
command:
- sh
source: |
echo -e "
PARAM1={{inputs.parameters.PARAM1}}
PARAM2={{inputs.parameters.PARAM2}}
PARAM3={{inputs.parameters.PARAM3}}
PARAM4={{inputs.parameters.PARAM4}}
PARAM5={{inputs.parameters.PARAM5}}
"
`

var wfArgumentsResult = `
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
name: test-workflow
spec:
entrypoint: main
ttlStrategy:
secondsAfterCompletion: 600
secondsAfterSuccess: 600
secondsAfterFailure: 600
arguments:
parameters:
- name: PARAM1
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM1
- name: PARAM2
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM2
- name: PARAM3
value: WorkflowTemplate value 3
- name: PARAM4
valueFrom:
configMapKeyRef:
name: test-config-map
key: PARAM4
- name: PARAM5
value: "Workflow value 5"
templates:
- name: main
inputs:
parameters:
- name: PARAM1
value: "{{workflow.parameters.PARAM1}}"
- name: PARAM2
value: "{{workflow.parameters.PARAM2}}"
- name: PARAM3
value: "{{workflow.parameters.PARAM3}}"
- name: PARAM4
value: "{{workflow.parameters.PARAM4}}"
- name: PARAM5
value: "{{workflow.parameters.PARAM5}}"
script:
image: busybox:latest
command:
- sh
source: |
echo -e "
PARAM1={{inputs.parameters.PARAM1}}
PARAM2={{inputs.parameters.PARAM2}}
PARAM3={{inputs.parameters.PARAM3}}
PARAM4={{inputs.parameters.PARAM4}}
PARAM5={{inputs.parameters.PARAM5}}
"
`

func TestJoinWfSpecs(t *testing.T) {
assert := assert.New(t)
wfDefault := wfv1.MustUnmarshalWorkflow(wfDefault)
Expand All @@ -239,6 +374,17 @@ func TestJoinWfSpecs(t *testing.T) {
assert.Equal("whalesay", targetWf.Spec.Entrypoint)
}

func TestJoinWfSpecArguments(t *testing.T) {
assert := assert.New(t)
wf := wfv1.MustUnmarshalWorkflow(wfArguments)
wft := wfv1.MustUnmarshalWorkflowTemplate(wfArgumentsTemplate)
result := wfv1.MustUnmarshalWorkflow(wfArgumentsResult)

targetWf, err := JoinWorkflowSpec(&wf.Spec, wft.GetWorkflowSpec(), nil)
assert.NoError(err)
assert.Equal(result.Spec.Arguments, targetWf.Spec.Arguments)
}

func TestJoinWorkflowMetaData(t *testing.T) {
assert := assert.New(t)
t.Run("WfDefaultMetaData", func(t *testing.T) {
Expand Down

0 comments on commit b290e51

Please sign in to comment.