From ea29162fad39ee86f781e9600ea0afaae01a0b1b Mon Sep 17 00:00:00 2001 From: Lentil1016 Date: Fri, 23 Mar 2018 13:10:20 +0800 Subject: [PATCH] Fix: issue #3714 Signed-off-by: Lentil1016 --- pkg/tiller/release_server.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pkg/tiller/release_server.go b/pkg/tiller/release_server.go index a96c64938..56831fce9 100644 --- a/pkg/tiller/release_server.go +++ b/pkg/tiller/release_server.go @@ -346,7 +346,7 @@ func (s *ReleaseServer) execHook(hs []*release.Hook, name, namespace, hook strin executingHooks = sortByHookWeight(executingHooks) - for _, h := range executingHooks { + for index, h := range executingHooks { b := bytes.NewBufferString(h.Manifest) if err := kubeCli.Create(namespace, b, timeout, false); err != nil { @@ -360,6 +360,19 @@ func (s *ReleaseServer) execHook(hs []*release.Hook, name, namespace, hook strin s.Log("warning: Release %s %s %s could not complete: %s", name, hook, h.Path, err) // If a hook is failed, checkout the annotation of the hook to determine whether the hook should be deleted // under failed condition. If so, then clear the corresponding resource object in the hook + // Delete previous succeeded hooks with hook-delete-policy hook-succeeded + for _, hp := range executingHooks[:index] { + if hookShouldBeDeleted(hp, hooks.HookSucceeded) { + b.Reset() + b.WriteString(hp.Manifest) + s.Log("deleting %s hook %s for release %s due to %q policy", hook, hp.Name, name, hooks.HookSucceeded) + if errHookDelete := kubeCli.Delete(namespace, b); errHookDelete != nil { + s.Log("warning: Release %s %s %S could not be deleted: %s", name, hook, hp.Path, errHookDelete) + return errHookDelete + } + } + hp.LastRun = timeconv.Now() + } if hookShouldBeDeleted(h, hooks.HookFailed) { b.Reset() b.WriteString(h.Manifest)