ahmetb/kubectx · error

failed to load

Error message

failed to load: %w

What it means

The loader (DefaultLoader, honoring KUBECONFIG or ~/.kube/config) failed to load any files: missing files where at least one is required, permission errors, or unset HOME making the default path underivable. This is the entry guard of Kubeconfig.Parse.

Solutions

  1. Ensure KUBECONFIG paths exist and are readable (or unset the variable)
  2. Set HOME to a valid directory so ~/.kube/config can be found
  3. Check file permissions on the kubeconfig files
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at internal/kubeconfig/kubeconfig.go:74 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of ahmetb/kubectx@12ad6fb22e (2026-09-02). Data as JSON: /api/errors/03cceee98ad639a6. Report an issue: GitHub.

Appendix: source

Thrown at internal/kubeconfig/kubeconfig.go:74

func (k *Kubeconfig) WithLoader(l Loader) *Kubeconfig {
	k.loader = l
	return k
}

func (k *Kubeconfig) Close() error {
	var firstErr error
	for _, fe := range k.files {
		if err := fe.f.Close(); err != nil && firstErr == nil {
			firstErr = err
		}
	}
	return firstErr
}

func (k *Kubeconfig) Parse() error {
	rwcs, err := k.loader.Load()
	if err != nil {
		return fmt.Errorf("failed to load: %w", err)
	}

	k.files = make([]fileEntry, 0, len(rwcs))
	for i, f := range rwcs {
		var v yaml.Node
		if err := yaml.NewDecoder(f).Decode(&v); err != nil {
			// Close all file handles on failure to avoid leaks.
			for _, rf := range rwcs {
				rf.Close()
			}
			return fmt.Errorf("failed to decode file %d: %w", i, err)
		}
		rn := yaml.NewRNode(&v)
		if rn.YNode().Kind != yaml.MappingNode {
			for _, rf := range rwcs {
				rf.Close()
			}
			return fmt.Errorf("kubeconfig file %d is not a map document", i)

View on GitHub (pinned to 12ad6fb22e)