Commit e6d907ed authored by Federico Gimenez's avatar Federico Gimenez

check if resource is present before adding it to remaining or keep on deletion

parent 15053e67
......@@ -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)
}
......
......@@ -159,7 +159,7 @@ func DeleteRelease(rel *release.Release, vs chartutil.VersionSet, kubeClient env
return rel.Manifest, []error{fmt.Errorf("corrupted release record. You must manually delete the resources: %s", err)}
}
filesToKeep, filesToDelete := filterManifestsToKeep(files)
filesToKeep, filesToDelete := filterManifestsToKeep(files, kubeClient, rel.Namespace)
if len(filesToKeep) > 0 {
kept = summarizeKeptManifests(filesToKeep)
}
......
......@@ -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
......@@ -29,11 +33,16 @@ const resourcePolicyAnno = "helm.sh/resource-policy"
// during an uninstallRelease action.
const keepPolicy = "keep"
func filterManifestsToKeep(manifests []Manifest) ([]Manifest, []Manifest) {
func filterManifestsToKeep(manifests []Manifest, kubeClient environment.KubeClient, namespace string) ([]Manifest, []Manifest) {
remaining := []Manifest{}
keep := []Manifest{}
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
}
if m.Head.Metadata == nil || m.Head.Metadata.Annotations == nil || len(m.Head.Metadata.Annotations) == 0 {
remaining = append(remaining, m)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment