{"record":{"id":"591d47fa77f4ba39","repo":"kubernetes/kops","slug":"failed-to-list-pools-v-591d47","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/openstacktasks/lbpool.go","lineNumber":94,"sourceCode":"\t\t// Update all search terms\n\t\tfind.ID = a.ID\n\t\tfind.Name = a.Name\n\t}\n\treturn a, nil\n}\n\nfunc (p *LBPool) Find(context *fi.CloudupContext) (*LBPool, error) {\n\tif p.Name == nil && p.ID == nil {\n\t\treturn nil, nil\n\t}\n\n\tcloud := context.T.Cloud.(openstack.OpenstackCloud)\n\tpoolList, err := cloud.ListPools(v2pools.ListOpts{\n\t\tID:   fi.ValueOf(p.ID),\n\t\tName: fi.ValueOf(p.Name),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"Failed to list pools: %v\", err)\n\t}\n\tif len(poolList) == 0 {\n\t\treturn nil, nil\n\t}\n\tif len(poolList) > 1 {\n\t\treturn nil, fmt.Errorf(\"Multiple pools found for name %s\", fi.ValueOf(p.Name))\n\t}\n\n\treturn NewLBPoolTaskFromCloud(cloud, p.Lifecycle, &poolList[0], p)\n}\n\nfunc (s *LBPool) Run(context *fi.CloudupContext) error {\n\treturn fi.CloudupDefaultDeltaRunMethod(s, context)\n}\n\nfunc (_ *LBPool) CheckChanges(a, e, changes *LBPool) error {\n\tif a == nil {\n\t\tif e.Name == nil {","sourceCodeStart":76,"sourceCodeEnd":112,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstacktasks/lbpool.go#L76-L112","documentation":"LBPool.Find lists Octavia pools via cloud.ListPools (GET /v2/lbaas/pools filtered by ID/Name). Any API-level failure of that listing — auth, connectivity, malformed response — is wrapped with this message. It means kOps could not complete the reconcile's discovery phase.","triggerScenarios":"Listing pools during `kops update/replace` when the Octavia endpoint is unreachable (network/DNS), the token is expired, or the service catalog lacks the load-balancer (octavia) endpoint for the region.","commonSituations":"Wrong OS_REGION_NAME so no octavia endpoint; Keystone auth failure; openstack load-balancer service not deployed in the cloud; transient 5xx from the Octavia API.","solutions":["Inspect the wrapped error: for auth errors run `openstack token issue`; for endpoint errors run `openstack catalog list` and confirm octavia exists.","Fix region/endpoint env vars (OS_REGION_NAME, OS_INTERFACE) so the load-balancer v2 endpoint resolves.","Retry after transient 5xx/network errors — kops update is idempotent.","Ensure the Octavia service is installed in the target cloud/region before using NLB load balancers."],"exampleFix":"// before\nexport OS_REGION_NAME=RegionTwo  # octavia not deployed here\n// after\nexport OS_REGION_NAME=RegionOne  # region with octavia endpoint\n$ kops update cluster --name mycluster --yes","handlingStrategy":"retry","validationCode":"// preflight: octavia endpoint resolvable and token valid\nif _, err := openstackCatalogLookup(\"load-balancer\", region); err != nil {\n\treturn fmt.Errorf(\"octavia endpoint missing for region %s: %w\", region, err)\n}\nif _, err := keystoneTokenIssue(); err != nil { return fmt.Errorf(\"auth failed: %w\", err) }","typeGuard":null,"tryCatchPattern":"err := retry.Do(func() error {\n\t_, err := kopsFindPools()\n\tif err == nil { return nil }\n\tif isTransient(err) { return retry.Unrecoverable(err) } // 401/404 of endpoint won't heal\n\treturn err\n}, retry.Attempts(3), retry.Delay(10*time.Second))","preventionTips":["Set OS_REGION_NAME/OS_INTERFACE correctly so the octavia endpoint resolves.","Ensure Octavia is deployed in the target region before enabling NLB load balancers.","Refresh credentials for long-running kops operations."],"tags":["openstack","octavia","api-error","discovery"],"backgroundTag":"openstack-api-list-failed","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"}