{"record":{"id":"7af3a3e0725792c3","repo":"kubernetes/kops","slug":"failed-to-list-pools-v","errorCode":null,"errorMessage":"failed to list pools: %v","messagePattern":"failed to list pools: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/loadbalancer.go","lineNumber":497,"sourceCode":"\t\t}\n\t\treturn memberList, err\n\t}\n\treturn memberList, nil\n}\n\nfunc (c *openstackCloud) ListPools(opts v2pools.ListOpts) (poolList []v2pools.Pool, err error) {\n\treturn listPools(c, opts)\n}\n\nfunc listPools(c OpenstackCloud, opts v2pools.ListOpts) (poolList []v2pools.Pool, err error) {\n\tif c.LoadBalancerClient() == nil {\n\t\treturn poolList, fmt.Errorf(\"loadbalancer support not available in this deployment\")\n\t}\n\n\tdone, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {\n\t\tpoolPage, err := v2pools.List(c.LoadBalancerClient(), opts).AllPages(context.TODO())\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"failed to list pools: %v\", err)\n\t\t}\n\t\tpoolList, err = v2pools.ExtractPools(poolPage)\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"failed to extract pools: %v\", err)\n\t\t}\n\t\treturn true, nil\n\t})\n\tif !done {\n\t\tif err == nil {\n\t\t\terr = wait.ErrWaitTimeout\n\t\t}\n\t\treturn poolList, err\n\t}\n\treturn poolList, nil\n}\n\nfunc (c *openstackCloud) ListListeners(opts listeners.ListOpts) (listenerList []listeners.Listener, err error) {\n\treturn listListeners(c, opts)","sourceCodeStart":479,"sourceCodeEnd":515,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/loadbalancer.go#L479-L515","documentation":"Wraps a failure from the Octavia v2 pools.List paginated API call inside listPools. The underlying gophercloud error (auth, endpoint, HTTP status) is embedded via %v after readBackoff retries are exhausted.","triggerScenarios":"v2pools.List(c.LoadBalancerClient(), opts).AllPages(context.TODO()) errors: authentication failure, missing lbaas endpoint in catalog, 403 on project scope, Octavia outage, or network failure — repeated across readBackoff attempts then returned.","commonSituations":"Expired Keystone token mid-operation; project lacks access to load-balancer service; Octavia API returning 500 during upgrades; DNS/resolution failure to the internal endpoint.","solutions":["Read the wrapped inner error to identify auth vs endpoint vs 5xx","Refresh credentials and confirm the token has load-balancer:list permission in the target project","Check Octavia service health and endpoint registration in the catalog","Retry later if the API is mid-upgrade or rate limited"],"exampleFix":"null","handlingStrategy":"retry","validationCode":"// ensure LB service exists in catalog before calling\nclient := cloud.LoadBalancerClient()\nif client == nil { return errors.New(\"no LB client\") }","typeGuard":null,"tryCatchPattern":"pools, err := cloud.ListPools(opts)\nif err != nil {\n\tvar se gophercloud.ErrDefault500\n\tif errors.As(err, &se) || strings.Contains(err.Error(), \"503\") {\n\t\t// Octavia outage: back off and retry later\n\t}\n\treturn fmt.Errorf(\"listing pools: %w\", err)\n}","preventionTips":["Confirm project scope has load-balancer:list RBAC","Check Octavia health endpoint before bulk reconciliation","Respect rate limits; use backoff on 429/5xx"],"tags":["openstack","octavia","api-error","loadbalancer"],"backgroundTag":"openstack-api-request-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}