{"record":{"id":"b7051c2b7aee46d5","repo":"hashicorp/nomad","slug":"failed-to-parse-server-members-members-nil","errorCode":null,"errorMessage":"Failed to parse server members, members==nil","messagePattern":"Failed to parse server members, members==nil","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"command/operator_debug.go","lineNumber":1844,"sourceCode":"\t\tf, err := os.Open(file)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif _, err := io.Copy(tw, f); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tf.Close()\n\n\t\treturn nil\n\t})\n}\n\n// filterServerMembers returns a slice of server member names matching the search criteria\nfunc filterServerMembers(serverMembers *api.ServerMembers, serverIDs string, region string) (membersFound []string, err error) {\n\tif serverMembers.Members == nil {\n\t\treturn nil, fmt.Errorf(\"Failed to parse server members, members==nil\")\n\t}\n\n\tprefixes := stringToSlice(serverIDs)\n\n\t// \"leader\" is a special case which Nomad handles in the API.  If \"leader\"\n\t// appears in serverIDs, add it to membersFound and remove it from the list\n\t// so that it isn't processed by the range loop\n\tif slices.Contains(prefixes, \"leader\") {\n\t\tmembersFound = append(membersFound, \"leader\")\n\t\thelper.RemoveEqualFold(&prefixes, \"leader\")\n\t}\n\n\tfor _, member := range serverMembers.Members {\n\t\t// If region is provided it must match exactly\n\t\tif region != \"\" && member.Tags[\"region\"] != region {\n\t\t\tcontinue\n\t\t}\n","sourceCodeStart":1826,"sourceCodeEnd":1862,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/command/operator_debug.go#L1826-L1862","documentation":"filterServerMembers filters Nomad server member names from an api.ServerMembers response during `nomad operator debug` agent collection. If the response's Members slice is nil — meaning the /v1/agent/members call returned nothing parseable — the function cannot proceed and returns this error. It signals an empty/failed server-members API response rather than a filtering problem.","triggerScenarios":"api.Agent().Members() returned a ServerMembers with a nil Members slice — the agent members endpoint returned an empty body or a response that did not deserialize into members.","commonSituations":"Querying a Nomad agent whose HTTP API is unreachable or returning an error body, ACL tokens blocking the members endpoint, mismatched client/server API versions, or pointing debug at a client-only node context where member data is empty.","solutions":["Verify the target Nomad address is a reachable server (or agent that can proxy): curl $NOMAD_ADDR/v1/agent/members","Check NOMAD_ADDR and any ACL token; ensure the token has agent:read / node listing permissions","Check Nomad client and server versions for API compatibility; upgrade the CLI to match the cluster","Re-run debug; if it persists, inspect server logs for failures on the members endpoint"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// validate connectivity and response before filtering\nresp, err := client.Agent().Members()\nif err != nil {\n    return fmt.Errorf(\"members query failed: %w\", err)\n}\nif resp == nil || resp.Members == nil || len(resp.Members) == 0 {\n    return errors.New(\"no server members returned; check NOMAD_ADDR and ACLs\")\n}","typeGuard":"func hasMembers(m *api.ServerMembers) bool {\n    return m != nil && m.Members != nil && len(m.Members) > 0\n}","tryCatchPattern":"members, err := filterServerMembers(resp, serverIDs, region)\nif err != nil {\n    if strings.Contains(err.Error(), \"members==nil\") {\n        log.Println(\"empty members response: verify NOMAD_ADDR points to a reachable server and ACL token grants agent:read\")\n    }\n    return err\n}","preventionTips":["Verify NOMAD_ADDR resolves to a reachable Nomad server before debug","Test with curl $NOMAD_ADDR/v1/agent/members first","Ensure ACL tokens include permissions for the agent members endpoint","Keep nomad CLI version compatible with the cluster's server version"],"tags":["api","nomad","debug-bundle"],"backgroundTag":"empty-api-response","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}