From 34d685f8bf77087b72ab704d366bf6519c66a5b9 Mon Sep 17 00:00:00 2001 From: Jacob LeGrone Date: Thu, 10 Oct 2019 18:22:36 -0400 Subject: [PATCH 1/2] feat(hooks): set default deletion policy to before-hook-creation Signed-off-by: Jacob LeGrone --- pkg/action/hooks.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkg/action/hooks.go b/pkg/action/hooks.go index d0498c9c6..638decff8 100644 --- a/pkg/action/hooks.go +++ b/pkg/action/hooks.go @@ -40,6 +40,15 @@ func (cfg *Configuration) execHook(rl *release.Release, hook release.HookEvent, sort.Sort(hookByWeight(executingHooks)) for _, h := range executingHooks { + // Set default delete policy to before-hook-creation + if h.DeletePolicies == nil || len(h.DeletePolicies) == 0 { + // TODO(jlegrone): Only apply before-hook-creation delete policy to run to completion + // resources. For all other resource types update in place if a + // resource with the same name already exists and is owned by the + // current release. + h.DeletePolicies = []release.HookDeletePolicy{release.HookBeforeHookCreation} + } + if err := cfg.deleteHookByPolicy(h, release.HookBeforeHookCreation); err != nil { return err } From 2d983f27e7a7ae6e7f67c47ec6c9f678e86968a9 Mon Sep 17 00:00:00 2001 From: Jacob LeGrone Date: Thu, 10 Oct 2019 18:30:49 -0400 Subject: [PATCH 2/2] feat(hooks): never delete CustomResourceDefinitions Signed-off-by: Jacob LeGrone --- pkg/action/hooks.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkg/action/hooks.go b/pkg/action/hooks.go index 638decff8..ab576be1e 100644 --- a/pkg/action/hooks.go +++ b/pkg/action/hooks.go @@ -119,6 +119,11 @@ func (x hookByWeight) Less(i, j int) bool { // deleteHookByPolicy deletes a hook if the hook policy instructs it to func (cfg *Configuration) deleteHookByPolicy(h *release.Hook, policy release.HookDeletePolicy) error { + // Never delete CustomResourceDefinitions; this could cause lots of + // cascading garbage collection. + if h.Kind == "CustomResourceDefinition" { + return nil + } if hookHasDeletePolicy(h, policy) { resources, err := cfg.KubeClient.Build(bytes.NewBufferString(h.Manifest), false) if err != nil {