{"record":{"id":"fee56109abacb80a","repo":"lima-vm/lima","slug":"failed-to-run-v-w-stdout-q-stderr-q","errorCode":null,"errorMessage":"failed to run %v: %w; stdout=%#q, stderr=%#q","messagePattern":"failed to run (.+?): %w; stdout=%#q, stderr=%#q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/guestagent/kubernetesservice/kubernetesservice.go","lineNumber":118,"sourceCode":"\t}\n\tfor _, kc := range candidateKubeConfigs {\n\t\tif _, err := os.Stat(kc); !errors.Is(err, os.ErrNotExist) {\n\t\t\treturn kc\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc canGetServices(ctx context.Context, kubectl, kubeconfig string) error {\n\tcmd := exec.CommandContext(ctx, kubectl, \"auth\", \"can-i\", \"get\", \"service\")\n\tif kubeconfig != \"\" {\n\t\tcmd.Env = append(os.Environ(), \"KUBECONFIG=\"+kubeconfig)\n\t}\n\tvar stdout, stderr bytes.Buffer\n\tcmd.Stdout = &stdout\n\tcmd.Stderr = &stderr\n\tif err := cmd.Run(); err != nil {\n\t\treturn fmt.Errorf(\"failed to run %v: %w; stdout=%#q, stderr=%#q\", cmd.Args, err, stdout.String(), stderr.String())\n\t}\n\tif strings.TrimSpace(stdout.String()) != \"yes\" {\n\t\treturn fmt.Errorf(\"failed to run %v: expected `yes`, got %#q\", cmd.Args, stdout.String())\n\t}\n\treturn nil\n}\n\nfunc (s *ServiceWatcher) startAndStreamKubectl(cmd *exec.Cmd) error {\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar stderr bytes.Buffer\n\tcmd.Stderr = &stderr\n\n\tif err := cmd.Start(); err != nil {\n\t\treturn fmt.Errorf(\"failed to run %v: %w; stderr=%#q\", cmd.Args, err, stderr.String())","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/lima-vm/lima/blob/dd909d0973cd84fa35f9e1693181b4585ea616c1/pkg/guestagent/kubernetesservice/kubernetesservice.go#L100-L136","documentation":"canGetServices runs a kubectl probe (with KUBECONFIG set) capturing stdout/stderr, expecting the command to exit 0 with output `yes`. If the command exits nonzero, this error wraps the run error plus captured stdout and stderr, so the kubectl diagnostics are embedded in the message.","triggerScenarios":"The kubectl probe command fails to execute or exits nonzero: kubeconfig path does not exist or is invalid, cluster API server is unreachable, auth credentials expired, or kubectl binary is missing (exec: not found).","commonSituations":"Kubernetes cluster in the VM is still starting or has crashed; kubeconfig generated for a different context/port; kubectl not installed in the guest; certificate/token expired after VM snapshot restore.","solutions":["Read the embedded stderr in the message - it contains kubectl's own diagnosis (connection refused, unauthorized, etc.).","Verify the kubeconfig file exists and points at a reachable cluster (`kubectl --kubeconfig <path> cluster-info`).","Confirm the Kubernetes cluster/control plane inside the VM is running (`docker ps` / `kubectl get nodes`).","Ensure the kubectl binary exists in PATH within the guest."],"exampleFix":"// before\nKUBECONFIG=/nonexistent/config\n// after\nexport KUBECONFIG=$HOME/.kube/config && kubectl cluster-info","handlingStrategy":"retry","validationCode":"if _, err := os.Stat(kubeconfig); err != nil {\n    return fmt.Errorf(\"kubeconfig missing: %w\", err)\n}\nif _, err := exec.LookPath(\"kubectl\"); err != nil {\n    return fmt.Errorf(\"kubectl not installed in guest\")\n}","typeGuard":null,"tryCatchPattern":"if err := canGetServices(ctx, kubeconfig); err != nil {\n    if strings.Contains(err.Error(), \"connection refused\") {\n        // cluster still starting; retry with backoff\n    }\n    log.Printf(\"probe failed: %v\", err) // stderr inside message has kubectl diagnosis\n}","preventionTips":["Wait for the cluster control plane to be healthy before probing.","Regenerate the kubeconfig whenever the VM or cluster port changes.","Install kubectl in the guest image as a build step."],"tags":["kubernetes","kubectl","guestagent","diagnostics"],"backgroundTag":"kubectl-command-failed","analyzedSha":"dd909d0973cd84fa35f9e1693181b4585ea616c1","analyzedAt":"2026-09-01T14:24:59.842Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}