|
|
@ -848,20 +848,20 @@ func (s *releaseServer) UninstallRelease(c ctx.Context, req *services.UninstallR
|
|
|
|
// We could instead just delete everything in no particular order.
|
|
|
|
// We could instead just delete everything in no particular order.
|
|
|
|
return nil, err
|
|
|
|
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
|
|
|
|
// Collect the errors, and return them later.
|
|
|
|
// to delete as much as possible instead of failing at the first error.
|
|
|
|
es := []string{}
|
|
|
|
for _, file := range files {
|
|
|
|
for _, file := range files {
|
|
|
|
b := bytes.NewBufferString(file.content)
|
|
|
|
b := bytes.NewBufferString(file.content)
|
|
|
|
if err := s.env.KubeClient.Delete(rel.Namespace, b); err != nil {
|
|
|
|
if err := s.env.KubeClient.Delete(rel.Namespace, b); err != nil {
|
|
|
|
log.Printf("uninstall: Failed deletion of %q: %s", req.Name, err)
|
|
|
|
log.Printf("uninstall: Failed deletion of %q: %s", req.Name, err)
|
|
|
|
return nil, err
|
|
|
|
es = append(es, err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if !req.DisableHooks {
|
|
|
|
if !req.DisableHooks {
|
|
|
|
if err := s.execHook(rel.Hooks, rel.Name, rel.Namespace, postDelete); err != nil {
|
|
|
|
if err := s.execHook(rel.Hooks, rel.Name, rel.Namespace, postDelete); err != nil {
|
|
|
|
return res, err
|
|
|
|
es = append(es, err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -875,7 +875,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.
|
|
|
|
// byName implements the sort.Interface for []*release.Release.
|
|
|
|