|
|
|
@ -32,6 +32,7 @@ import (
|
|
|
|
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
|
|
|
|
|
|
|
|
|
"k8s.io/helm/pkg/chartutil"
|
|
|
|
|
"k8s.io/helm/pkg/kube"
|
|
|
|
|
"k8s.io/helm/pkg/proto/hapi/chart"
|
|
|
|
|
"k8s.io/helm/pkg/proto/hapi/release"
|
|
|
|
|
"k8s.io/helm/pkg/proto/hapi/services"
|
|
|
|
@ -905,11 +906,21 @@ func (s *ReleaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
|
|
|
|
|
return nil, fmt.Errorf("Could not get apiVersions from Kubernetes: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// From here on out, the release is currently considered to be in Status_DELETED
|
|
|
|
|
// state. See https://github.com/kubernetes/helm/issues/1511 for a better way
|
|
|
|
|
// to do this.
|
|
|
|
|
if err := s.env.Releases.Update(rel); err != nil {
|
|
|
|
|
log.Printf("uninstall: Failed to store updated release: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
manifests := splitManifests(rel.Manifest)
|
|
|
|
|
_, files, err := sortManifests(manifests, vs, UninstallOrder)
|
|
|
|
|
if err != nil {
|
|
|
|
|
// We could instead just delete everything in no particular order.
|
|
|
|
|
return nil, err
|
|
|
|
|
// FIXME: One way to delete at this point would be to try a label-based
|
|
|
|
|
// deletion. The problem with this is that we could get a false positive
|
|
|
|
|
// and delete something that was not legitimately part of this release.
|
|
|
|
|
return nil, fmt.Errorf("corrupted release record. You must manually delete the resources: %s", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Collect the errors, and return them later.
|
|
|
|
@ -918,6 +929,10 @@ func (s *ReleaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
|
|
|
|
|
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)
|
|
|
|
|
if err == kube.ErrNoObjectsVisited {
|
|
|
|
|
// Rewrite the message from "no objects visited"
|
|
|
|
|
err = errors.New("object not found, skipping delete")
|
|
|
|
|
}
|
|
|
|
|
es = append(es, err.Error())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -928,11 +943,7 @@ func (s *ReleaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if !req.Purge {
|
|
|
|
|
if err := s.env.Releases.Update(rel); err != nil {
|
|
|
|
|
log.Printf("uninstall: Failed to store updated release: %s", err)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if req.Purge {
|
|
|
|
|
if err := s.purgeReleases(rels...); err != nil {
|
|
|
|
|
log.Printf("uninstall: Failed to purge the release: %s", err)
|
|
|
|
|
}
|
|
|
|
@ -940,7 +951,7 @@ func (s *ReleaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
|
|
|
|
|
|
|
|
|
|
var errs error
|
|
|
|
|
if len(es) > 0 {
|
|
|
|
|
errs = fmt.Errorf("deletion error count %d: %s", len(es), strings.Join(es, "; "))
|
|
|
|
|
errs = fmt.Errorf("deletion completed with %d error(s): %s", len(es), strings.Join(es, "; "))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return res, errs
|
|
|
|
|