diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 798434da445d98800cb083951964b787bc43e3b9..f117d7ee9ef12e335538977519dec40a27902d4c 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -53,6 +53,11 @@ import ( "k8s.io/kubernetes/pkg/printers" ) +const ( + // MissingGetHeader is added to Get's outout when a resource is not found. + MissingGetHeader = "==> MISSING\nKIND\t\tNAME\n" +) + // ErrNoObjectsVisited indicates that during a visit operation, no matching objects were found. var ErrNoObjectsVisited = goerrors.New("no objects visited") @@ -217,7 +222,7 @@ func (c *Client) Get(namespace string, reader io.Reader) (string, error) { } } if len(missing) > 0 { - buf.WriteString("==> MISSING\nKIND\t\tNAME\n") + buf.WriteString(MissingGetHeader) for _, s := range missing { fmt.Fprintln(buf, s) } diff --git a/pkg/tiller/release_modules.go b/pkg/tiller/release_modules.go index b5fbbeb445327c519782cf52f3cf0a22424f13b1..876e1ba37a8bf6410c63057e982d788e920edcad 100644 --- a/pkg/tiller/release_modules.go +++ b/pkg/tiller/release_modules.go @@ -161,7 +161,7 @@ func DeleteRelease(rel *release.Release, vs chartutil.VersionSet, kubeClient env filesToKeep, filesToDelete := filterManifestsToKeep(files) if len(filesToKeep) > 0 { - kept = summarizeKeptManifests(filesToKeep) + kept = summarizeKeptManifests(filesToKeep, kubeClient, rel.Namespace) } errs = []error{} diff --git a/pkg/tiller/resource_policy.go b/pkg/tiller/resource_policy.go index 2102ab66ba39efe8a5c0f9d974aa64ed667a61a7..66da1283ff244566bba77242b6b71f481b9f6b10 100644 --- a/pkg/tiller/resource_policy.go +++ b/pkg/tiller/resource_policy.go @@ -17,7 +17,11 @@ limitations under the License. package tiller import ( + "bytes" "strings" + + "k8s.io/helm/pkg/kube" + "k8s.io/helm/pkg/tiller/environment" ) // resourcePolicyAnno is the annotation name for a resource policy @@ -34,7 +38,6 @@ func filterManifestsToKeep(manifests []Manifest) ([]Manifest, []Manifest) { keep := []Manifest{} for _, m := range manifests { - if m.Head.Metadata == nil || m.Head.Metadata.Annotations == nil || len(m.Head.Metadata.Annotations) == 0 { remaining = append(remaining, m) continue @@ -55,10 +58,19 @@ func filterManifestsToKeep(manifests []Manifest) ([]Manifest, []Manifest) { return keep, remaining } -func summarizeKeptManifests(manifests []Manifest) string { - message := "These resources were kept due to the resource policy:\n" +func summarizeKeptManifests(manifests []Manifest, kubeClient environment.KubeClient, namespace string) string { + var message string for _, m := range manifests { + // check if m is in fact present from k8s client's POV. + output, err := kubeClient.Get(namespace, bytes.NewBufferString(m.Content)) + if err != nil || strings.Contains(output, kube.MissingGetHeader) { + continue + } + details := "[" + m.Head.Kind + "] " + m.Head.Metadata.Name + "\n" + if message == "" { + message = "These resources were kept due to the resource policy:\n" + } message = message + details } return message