derailed/k9s · error
no nuker for %q
Error message
no nuker for %q
What it means
Table.Delete resolves the DAO for a GVR and requires the dao.Nuker interface (Delete with propagation/grace). If the DAO has no Delete method, delete requests cannot be delegated and the error names the GVR.
Source
Thrown at internal/model/table.go:154
func (t *Table) Get(ctx context.Context, path string) (runtime.Object, error) {
meta, err := getMeta(ctx, t.gvr)
if err != nil {
return nil, err
}
return meta.DAO.Get(ctx, path)
}
// Delete deletes a resource.
func (t *Table) Delete(ctx context.Context, path string, propagation *metav1.DeletionPropagation, grace dao.Grace) error {
meta, err := getMeta(ctx, t.gvr)
if err != nil {
return err
}
nuker, ok := meta.DAO.(dao.Nuker)
if !ok {
return fmt.Errorf("no nuker for %q", meta.DAO.GVR())
}
return nuker.Delete(ctx, path, propagation, grace)
}
// GetNamespace returns the model namespace.
func (t *Table) GetNamespace() string {
return t.data.GetNamespace()
}
// SetNamespace sets up model namespace.
func (t *Table) SetNamespace(ns string) {
t.data.Reset(ns)
}
// InNamespace checks if current namespace matches desired namespace.
func (t *Table) InNamespace(ns string) bool {
return t.data.GetNamespace() == ns && !t.data.Empty()View on GitHub (pinned to 2d3ccc6ba2)
Solutions
- Delete the underlying resource from its own view instead of a reference/tree row
- For custom DAOs, implement Delete(ctx, path, propagation, grace) to satisfy dao.Nuker (embedding dao.Resource usually provides it)
- Fall back to kubectl delete <resource> <name> -n <ns>
Example fix
// before: accessor without delete
type MyDAO struct {
dao.Resource
}
// (no Delete method -> not a Nuker)
// after: rely on embedded Nuker or implement it
type MyDAO struct {
dao.Resource // Resource implements dao.Nuker
} Defensive patterns
Strategy: type-guard
Type guard
func nukerFor(factory dao.Factory, gvr *client.GVR) (dao.Nuker, bool) {
accessor, err := dao.AccessorFor(factory, gvr)
if err != nil { return nil, false }
n, ok := accessor.(dao.Nuker)
return n, ok
} Try / catch
err := t.Delete(ctx, path, propagation, grace)
if err != nil && strings.Contains(err.Error(), "no nuker for") {
return fmt.Errorf("%w — delete this resource from its own view or via kubectl", err)
} Prevention
- Hide delete actions on reference rows and read-only accessors
- Ensure custom DAOs embed dao.Resource so they satisfy dao.Nuker
When it happens
Trigger: Deleting a resource whose accessor does not implement dao.Nuker: read-only style DAOs (Reference, generic non-resource accessors), or custom DAO registrations missing the Delete method.
Common situations: Attempting delete on reference/pointer rows in k9s (e.g. from a details tree); custom plugin accessors without delete capability.
Related errors
- no describer for %q
- resource %s is not Loggable
- resource %s is not Valuer
- expecting a nuker for %q
- expecting a switchable resource
AI-assisted analysis of derailed/k9s@2d3ccc6ba2 (2026-08-15).
Data as JSON: /api/errors/c50997a7b25d18f4.
Report an issue: GitHub.