From f27fe08b1b06ee86040371b5fa992b82b27d7980 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Mon, 10 Oct 2022 22:05:22 +0530 Subject: [PATCH] fix: default not respected in setting global configmap params. Fixes #9745 (#9758) Signed-off-by: Rohan Kumar --- .../workflow_configmap_substitution_test.go | 41 +++++++++++++++++++ workflow/controller/operator.go | 11 +++-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/test/e2e/workflow_configmap_substitution_test.go b/test/e2e/workflow_configmap_substitution_test.go index e6f652fb398e..2b9e7a16d5c5 100644 --- a/test/e2e/workflow_configmap_substitution_test.go +++ b/test/e2e/workflow_configmap_substitution_test.go @@ -182,6 +182,47 @@ spec: }) } +func (s *WorkflowConfigMapSelectorSubstitutionSuite) TestGlobalArgDefaultCMParamValueWhenNotFound() { + s.Given(). + Workflow(`apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: workflow-template-cmkeyselector-wf-global-arg-default-param- + label: + workflows.argoproj.io/test: "true" +spec: + serviceAccountName: argo + entrypoint: whalesay + arguments: + parameters: + - name: simple-global-param + valueFrom: + default: "default value" + configMapKeyRef: + name: not-existing-cm + key: not-existing-key + templates: + - name: whalesay + container: + image: argoproj/argosay:v2 + command: [sh, -c] + args: ["sleep 1; echo -n {{workflow.parameters.simple-global-param}} > /tmp/message.txt"] + outputs: + parameters: + - name: message + valueFrom: + path: /tmp/message.txt +`). + When(). + SubmitWorkflow(). + WaitForWorkflow(fixtures.ToBeSucceeded). + Then(). + ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { + assert.Equal(t, "default value", status.Nodes[metadata.Name].Outputs.Parameters[0].Value.String()) + assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) + }) +} + func TestConfigMapKeySelectorSubstitutionSuite(t *testing.T) { suite.Run(t, new(WorkflowConfigMapSelectorSubstitutionSuite)) } diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 7e383757eacc..39c41c8df3ae 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -578,10 +578,15 @@ func (woc *wfOperationCtx) setGlobalParameters(executionParameters wfv1.Argument if param.ValueFrom != nil && param.ValueFrom.ConfigMapKeyRef != nil { cmValue, err := common.GetConfigMapValue(woc.controller.configMapInformer, woc.wf.ObjectMeta.Namespace, param.ValueFrom.ConfigMapKeyRef.Name, param.ValueFrom.ConfigMapKeyRef.Key) if err != nil { - return fmt.Errorf("failed to set global parameter %s from configmap with name %s and key %s: %w", - param.Name, param.ValueFrom.ConfigMapKeyRef.Name, param.ValueFrom.ConfigMapKeyRef.Key, err) + if param.ValueFrom.Default != nil { + woc.globalParams["workflow.parameters."+param.Name] = param.ValueFrom.Default.String() + } else { + return fmt.Errorf("failed to set global parameter %s from configmap with name %s and key %s: %w", + param.Name, param.ValueFrom.ConfigMapKeyRef.Name, param.ValueFrom.ConfigMapKeyRef.Key, err) + } + } else { + woc.globalParams["workflow.parameters."+param.Name] = cmValue } - woc.globalParams["workflow.parameters."+param.Name] = cmValue } else { woc.globalParams["workflow.parameters."+param.Name] = param.Value.String() }