{"record":{"id":"d62cd46bf35de89f","repo":"kubernetes/kops","slug":"cannot-find-secret-q","errorCode":null,"errorMessage":"cannot find secret %q","messagePattern":"cannot find secret %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/kops/get_secrets.go","lineNumber":156,"sourceCode":"\t\tt := &tables.Table{}\n\t\tt.AddColumn(\"NAME\", func(i string) string {\n\t\t\treturn i\n\t\t})\n\t\treturn t.Render(items, out, \"NAME\")\n\n\tcase OutputYaml:\n\t\treturn fmt.Errorf(\"yaml output format is not (currently) supported for secrets\")\n\tcase OutputJSON:\n\t\treturn fmt.Errorf(\"json output format is not (currently) supported for secrets\")\n\tcase \"plaintext\":\n\t\tfor _, item := range items {\n\t\t\tvar data string\n\t\t\tsecret, err := secretStore.FindSecret(item)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"getting secret %q: %v\", item, err)\n\t\t\t}\n\t\t\tif secret == nil {\n\t\t\t\treturn fmt.Errorf(\"cannot find secret %q\", item)\n\t\t\t}\n\t\t\tdata = string(secret.Data)\n\n\t\t\t_, err = fmt.Fprintf(out, \"%s\\n\", data)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"writing output: %v\", err)\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown output format: %q\", options.Output)\n\t}\n}\n","sourceCodeStart":138,"sourceCodeEnd":171,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/cmd/kops/get_secrets.go#L138-L171","documentation":"FindSecret returns (nil, nil) when a secret name is known to the list but cannot be found in the store. RunGetSecrets detects this nil-secret case and returns `cannot find secret %q` so plaintext output never prints a nil dereference or empty value.","triggerScenarios":"Running `kops get secrets -o plaintext <name>` where the name appears in ListSecrets results but FindSecret returns nil — typically a stale list, a secret deleted concurrently, or a store backend inconsistency.","commonSituations":"Secret deleted by another operator between listing and reading; state store eventually-consistent backend returning stale listing; typo'd name passed while other names were listed without filter.","solutions":["Re-run `kops get secrets` to refresh the listing and confirm the secret still exists","Recreate the secret with `kops create secret` if it was deleted","Verify you are pointed at the correct cluster/state store"],"exampleFix":"// before\nkops get secrets -o plaintext deleted-secret\n\n// after\nkops create secret generic deleted-secret --name mycluster.example.com\nkops get secrets -o plaintext deleted-secret","handlingStrategy":"type-guard","validationCode":"items, err := listSecrets(store, names)\nif err != nil { return err }\nfor _, want := range names {\n\tfound := false\n\tfor _, have := range items {\n\t\tif have == want { found = true; break }\n\t}\n\tif !found { return fmt.Errorf(\"secret %q not in listing\", want) }\n}","typeGuard":"func secretExists(store fi.SecretStore, name string) bool {\n\ts, err := store.FindSecret(name)\n\treturn err == nil && s != nil\n}","tryCatchPattern":"secret, err := secretStore.FindSecret(item)\nif err != nil {\n\treturn err\n}\nif secret == nil {\n\treturn fmt.Errorf(\"cannot find secret %q (may have been deleted concurrently)\", item)\n}","preventionTips":["Re-list secrets before reading to avoid stale listings","Recreate deleted secrets before querying them","Confirm correct cluster/state store to rule out cross-cluster lookups"],"tags":["cli","kops","not-found","secret-store"],"backgroundTag":"resource-not-found","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}