From ea4dcbab113a34f3c514e2c9c2742f8297dbc53c Mon Sep 17 00:00:00 2001 From: Adam Reese Date: Wed, 27 Jul 2016 15:27:11 -0700 Subject: [PATCH] feat(kube): reap related resources on delete --- pkg/kube/client.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index f589cc75a..4e0c51908 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/watch" @@ -60,7 +61,19 @@ func (c *Client) Create(namespace string, reader io.Reader) error { // // Namespace will set the namespace func (c *Client) Delete(namespace string, reader io.Reader) error { - return perform(c, namespace, reader, deleteResource) + return perform(c, namespace, reader, func(info *resource.Info) error { + log.Printf("Starting delete for %s", info.Name) + reaper, err := c.Reaper(info.Mapping) + if err != nil { + // If there is no reaper for this resources, delete it. + if kubectl.IsNoSuchReaperError(err) { + return resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name) + } + return err + } + log.Printf("Using reaper for deleting %s", info.Name) + return reaper.Stop(info.Namespace, info.Name, 0, nil) + }) } // WatchUntilReady watches the resource given in the reader, and waits until it is ready. @@ -123,10 +136,6 @@ func createResource(info *resource.Info) error { return err } -func deleteResource(info *resource.Info) error { - return resource.NewHelper(info.Client, info.Mapping).Delete(info.Namespace, info.Name) -} - func watchUntilReady(info *resource.Info) error { w, err := resource.NewHelper(info.Client, info.Mapping).WatchSingle(info.Namespace, info.Name, info.ResourceVersion) if err != nil {