From 5d8509d9bcc20d91ec3d80a950f2d186cc249dfc Mon Sep 17 00:00:00 2001 From: Matt Butcher Date: Mon, 10 Oct 2016 14:10:00 -0600 Subject: [PATCH] fix(tiller): when delete fails, mark release as deleted When a deletion fails to remove a manifest file, the release should still be marked as deleted. This changes the error handling to try to delete all manifests, and then mark the release as deleted, then return the errors. Closes #1305 --- cmd/tiller/release_server.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/cmd/tiller/release_server.go b/cmd/tiller/release_server.go index a3bfb03e6..2b3cb2bd1 100644 --- a/cmd/tiller/release_server.go +++ b/cmd/tiller/release_server.go @@ -855,20 +855,20 @@ func (s *releaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR // We could instead just delete everything in no particular order. return nil, err } - // Note: We could re-join these into one file and delete just that one. Or - // we could collect errors (instead of bailing on the first error) and try - // to delete as much as possible instead of failing at the first error. + + // Collect the errors, and return them later. + es := []string{} for _, file := range files { b := bytes.NewBufferString(file.content) if err := s.env.KubeClient.Delete(rel.Namespace, b); err != nil { log.Printf("uninstall: Failed deletion of %q: %s", req.Name, err) - return nil, err + es = append(es, err.Error()) } } if !req.DisableHooks { if err := s.execHook(rel.Hooks, rel.Name, rel.Namespace, postDelete); err != nil { - return res, err + es = append(es, err.Error()) } } @@ -882,7 +882,12 @@ func (s *releaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR } } - return res, nil + var errs error + if len(es) > 0 { + errs = fmt.Errorf("deletion error count %d: %s", len(es), strings.Join(es, "; ")) + } + + return res, errs } // byName implements the sort.Interface for []*release.Release.