derailed/k9s · warning
%s
Error message
%s
What it means
Returned by HelmHistory.Delete after action.NewUninstall(cfg).Run(name) completes without a transport error but the UninstallResponse carries a non-empty Info string. Helm puts hook output and deletion notes in Info, so the DAO surfaces any informational payload as an error rather than swallowing it.
Source
Thrown at internal/dao/helm_history.go:169
return clt.Run(n)
}
// Delete uninstall a Helm.
func (h *HelmHistory) Delete(_ context.Context, path string, _ *metav1.DeletionPropagation, _ Grace) error {
ns, n := client.Namespaced(path)
cfg, err := ensureHelmConfig(h.Client().Config().Flags(), ns)
if err != nil {
return err
}
res, err := action.NewUninstall(cfg).Run(n)
if err != nil {
return err
}
if res != nil && res.Info != "" {
return fmt.Errorf("%s", res.Info)
}
return nil
}
View on GitHub (pinned to 2d3ccc6ba2)
Solutions
- Read the message and verify the outcome: check helm list / HelmHistory.List — the release is usually already gone
- If Info only contains hook output, treat the returned error as informational in your caller instead of a failure
- When the message mentions a failed hook, inspect hook job logs in the release namespace and clean up manually
Defensive patterns
Strategy: try-catch
Try / catch
if err := h.Delete(ctx, path, nil, Grace{}); err != nil {
if remaining, lerr := h.List(ctx); lerr == nil && !releaseExists(remaining, name) {
// release is gone: downgrade to warning, err is informational hook output
slog.Warn("helm uninstall info", slogs.Error, err)
return nil
}
return err
} Prevention
- Treat any error text from uninstall as informational until helm list proves the release still exists
- Pre-check hook definitions in release templates to anticipate messages
- Automate cleanup verification with HelmHistory.List instead of trusting Delete's return alone
When it happens
Trigger: Uninstalling a release whose pre/post-delete hooks emit output, or whose deletion leaves messages/warnings in res.Info — the run succeeds yet Info != "".
Common situations: Releases with pre-delete hooks (cert cleanup jobs, external deleters) that print messages; resources intentionally kept (CRDs, PVCs) noted by Helm; migrated Helm 2 releases carrying annotated info.
Related errors
- %s
- could not convert revision to a number: %w
- chart is in an invalid state
- unable to parse version in %q
AI-assisted analysis of derailed/k9s@2d3ccc6ba2 (2026-08-15).
Data as JSON: /api/errors/b67f950599ff8f7d.
Report an issue: GitHub.