derailed/k9s · error

no describer for %q

Error message

no describer for %q

What it means

Tree.Describe looks up the meta/DAO for a GVR and requires dao.Describer to serve describe text from a tree browser. If the accessor lacks the interface, the tree describe action fails with the offending GVR.

Source

Thrown at internal/model/tree.go:144

func (t *Tree) Empty() bool {
	return t.root.IsLeaf()
}

// Peek returns model data.
func (t *Tree) Peek() *xray.TreeNode {
	return t.root
}

// Describe describes a given resource.
func (t *Tree) Describe(ctx context.Context, gvr *client.GVR, path string) (string, error) {
	meta, err := t.getMeta(ctx, gvr)
	if err != nil {
		return "", err
	}

	desc, ok := meta.DAO.(dao.Describer)
	if !ok {
		return "", fmt.Errorf("no describer for %q", meta.DAO.GVR())
	}

	return desc.Describe(path)
}

// ToYAML returns a resource yaml.
func (t *Tree) ToYAML(ctx context.Context, gvr *client.GVR, path string) (string, error) {
	meta, err := t.getMeta(ctx, gvr)
	if err != nil {
		return "", err
	}

	desc, ok := meta.DAO.(dao.Describer)
	if !ok {
		return "", fmt.Errorf("no describer for %q", meta.DAO.GVR())
	}

	return desc.ToYAML(path, false)

View on GitHub (pinned to 2d3ccc6ba2)

Solutions

  1. Describe the same resource from its flat list view, which may route to a different accessor
  2. Ensure the accessor for that GVR implements dao.Describer (embed dao.Resource)
  3. Use kubectl describe <gvr> <name> as an external fallback
Defensive patterns

Strategy: type-guard

Type guard

func describerFor(accessor dao.Accessor) (dao.Describer, bool) {
    d, ok := accessor.(dao.Describer)
    return d, ok
}

Try / catch

out, err := t.Describe(ctx, gvr, path)
if err != nil && strings.Contains(err.Error(), "no describer for") {
    out, err = kubectlDescribeFallback(gvr, path) // shell out or refuse with a hint
}
if err != nil { return "", err }

Prevention

When it happens

Trigger: Triggering describe on a tree node whose GVR resolves to an accessor without Describe — custom resources mapped to bare accessors, or tree views configured for resources without describe support.

Common situations: Browsing resource graphs/trees (references between objects) and describing a node for an exotic or custom resource; plugins registering DAOs without describe.

Related errors


AI-assisted analysis of derailed/k9s@2d3ccc6ba2 (2026-08-15). Data as JSON: /api/errors/54066d3b7c85297d. Report an issue: GitHub.