From 8e9ce5324840b15d8cab568d2670939da1248350 Mon Sep 17 00:00:00 2001 From: Saravanan Balasubramanian Date: Mon, 2 May 2022 23:03:11 -0700 Subject: [PATCH 1/2] fix: Workflow level http template hook status update Signed-off-by: Saravanan Balasubramanian --- workflow/controller/hooks.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workflow/controller/hooks.go b/workflow/controller/hooks.go index 9382ed63003c..ac49796e814f 100644 --- a/workflow/controller/hooks.go +++ b/workflow/controller/hooks.go @@ -24,11 +24,15 @@ func (woc *wfOperationCtx) executeWfLifeCycleHook(ctx context.Context, tmplCtx * if execute { hookNodeName := generateLifeHookNodeName(woc.wf.ObjectMeta.Name, string(hookName)) woc.log.WithField("lifeCycleHook", hookName).WithField("node", hookNodeName).Infof("Running workflow level hooks") - _, err := woc.executeTemplate(ctx, hookNodeName, &wfv1.WorkflowStep{Template: hook.Template, TemplateRef: hook.TemplateRef}, tmplCtx, hook.Arguments, &executeTemplateOpts{}) + hookNode, err := woc.executeTemplate(ctx, hookNodeName, &wfv1.WorkflowStep{Template: hook.Template, TemplateRef: hook.TemplateRef}, tmplCtx, hook.Arguments, &executeTemplateOpts{}) if err != nil { return err } woc.addChildNode(woc.wf.Name, hookNodeName) + // If the hookNode node is HTTP template, it requires HTTP reconciliation, do it here + if hookNode != nil && woc.nodeRequiresTaskSetReconciliation(hookNode.Name) { + woc.taskSetReconciliation(ctx) + } } } @@ -71,7 +75,6 @@ func (woc *wfOperationCtx) executeTmplLifeCycleHook(ctx context.Context, envMap } woc.addChildNode(parentNode.Name, hookNodeName) hookNodes = append(hookNodes, hookNode) - } } completed = true From 3cc822a6dc323fedddc643e6ec5f7389199d586f Mon Sep 17 00:00:00 2001 From: Saravanan Balasubramanian Date: Tue, 23 Aug 2022 08:14:47 -0700 Subject: [PATCH 2/2] fix: added test Signed-off-by: Saravanan Balasubramanian --- workflow/controller/hooks_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/workflow/controller/hooks_test.go b/workflow/controller/hooks_test.go index d60b0e3bbc84..9b933c4d51ab 100644 --- a/workflow/controller/hooks_test.go +++ b/workflow/controller/hooks_test.go @@ -986,4 +986,12 @@ spec: woc.globalParams[common.GlobalVarWorkflowFailures], `[{\"displayName\":\"hook-failures\",\"message\":\"Pod failed\",\"templateName\":\"intentional-fail\",\"phase\":\"Failed\",\"podName\":\"hook-failures\"`, ) + assert.Equal(t, wfv1.NodePending, node.Phase) + makePodsPhase(ctx, woc, apiv1.PodFailed) + woc = newWorkflowOperationCtx(woc.wf, controller) + err := woc.podReconciliation(ctx) + assert.NoError(t, err) + node = woc.wf.Status.Nodes.FindByDisplayName("hook-failures.hooks.failure") + assert.NotNil(t, node) + assert.Equal(t, wfv1.NodeFailed, node.Phase) }