derailed/k9s · error

fail to load rawConfig: %w

Error message

fail to load rawConfig: %w

What it means

Returned by Config.CurrentContextName (internal/client/config.go:162) when c.RawConfig() — the clientcmd load-and-merge of all KUBECONFIG files — fails. The underlying error is wrapped with %w, so the real cause (YAML parse error, unreadable file, invalid merge) is preserved in the chain. Every consumer of CurrentContextName inherits this failure.

Source

Thrown at internal/client/config.go:162

	}
	if isSet(c.flags.Context) {
		ct, ok = cfg.Contexts[*c.flags.Context]
		if !ok {
			return "", fmt.Errorf("current-cluster - invalid context specified: %q", *c.flags.Context)
		}
	}

	return ct.Cluster, nil
}

// CurrentContextName returns the currently active config context.
func (c *Config) CurrentContextName() (string, error) {
	if isSet(c.flags.Context) {
		return *c.flags.Context, nil
	}
	cfg, err := c.RawConfig()
	if err != nil {
		return "", fmt.Errorf("fail to load rawConfig: %w", err)
	}

	return cfg.CurrentContext, nil
}

func (c *Config) CurrentContextNamespace() (string, error) {
	name, err := c.CurrentContextName()
	if err != nil {
		return "", err
	}
	context, err := c.GetContext(name)
	if err != nil {
		return "", err
	}

	return context.Namespace, nil
}

View on GitHub (pinned to 2d3ccc6ba2)

Solutions

  1. Reproduce outside k9s: kubectl config view — it will print the same parse error and usually the file path
  2. Run a YAML linter (yamllint) on each file in $KUBECONFIG and fix the reported line
  3. If a file is unreadable, fix permissions or remove it from KUBECONFIG
  4. Restore from backup (~/.kube/config.bak) or regenerate the file with kubectl config set-cluster/set-credentials/set-context

Example fix

# before: KUBECONFIG lists a corrupt file
KUBECONFIG=/home/me/.kube/config:/tmp/broken.yaml k9s

# after: isolate and repair
kubectl config view --raw   # errors, pointing at broken.yaml
yamllint /tmp/broken.yaml   # fix reported line, or drop it
KUBECONFIG=/home/me/.kube/config k9s
Defensive patterns

Strategy: validation

Validate before calling

import "k8s.io/client-go/tools/clientcmd"

func kubeconfigLoads() error {
	rules := clientcmd.NewDefaultClientConfigLoadingRules()
	cfg, err := rules.Load()
	if err != nil {
		return fmt.Errorf("kubeconfig problem: %w", err)
	}
	_ = cfg // additionally assert current-context resolves if needed
	return nil
}

Try / catch

name, err := cfg.CurrentContextName()
if err != nil {
	// unwrap: the chain carries the clientcmd parse error incl. file path
	log.Printf("kubeconfig unusable: %v", err)
	return err
}

Prevention

When it happens

Trigger: Any clientcmd loading-rule failure: malformed YAML in a kubeconfig file (tabs, broken indentation), a file listed in KUBECONFIG that cannot be read (permissions), or content that does not unmarshal into api.Config.

Common situations: Hand-edited kubeconfig with a syntax slip; a tool writing partial output concurrently (crashed mid-write); KUBECONFIG=/home/user/.kube/config:/etc/edge-cluster where one entry is corrupt; file permissions changed after a privilege drop.

Related errors


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