{"record":{"id":"2bac36b55a9c716d","repo":"kubernetes/kops","slug":"fail-to-get-pool-with-id-s-v","errorCode":null,"errorMessage":"Fail to get pool with ID: %s: %v","messagePattern":"Fail to get pool with ID: (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstacktasks/lblistener.go","lineNumber":85,"sourceCode":"\t\tAllowedCIDRs: listener.AllowedCIDRs,\n\t\tLifecycle:    lifecycle,\n\t}\n\n\tif len(listener.Pools) > 0 {\n\t\tfor _, pool := range listener.Pools {\n\t\t\tpoolTask, err := NewLBPoolTaskFromCloud(cloud, lifecycle, &pool, find.Pool)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"NewLBListenerTaskFromCloud: Failed to create new LBListener task for pool %s: %v\", pool.Name, err)\n\t\t\t} else {\n\t\t\t\tlistenerTask.Pool = poolTask\n\t\t\t\t// TODO: Support Multiple?\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t} else {\n\t\tpool, err := cloud.GetPool(listener.DefaultPoolID)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"Fail to get pool with ID: %s: %v\", listener.DefaultPoolID, err)\n\t\t}\n\t\tpoolTask, err := NewLBPoolTaskFromCloud(cloud, lifecycle, pool, find.Pool)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"NewLBListenerTaskFromCloud: Failed to create new LBListener task for pool %s: %v\", pool.Name, err)\n\t\t}\n\t\tlistenerTask.Pool = poolTask\n\t}\n\tif find != nil {\n\t\t// Update all search terms\n\t\tfind.ID = listenerTask.ID\n\t\tfind.Name = listenerTask.Name\n\t\tfind.Pool = listenerTask.Pool\n\t}\n\treturn listenerTask, nil\n}\n\nfunc (s *LBListener) Find(context *fi.CloudupContext) (*LBListener, error) {\n\tif s.Name == nil {","sourceCodeStart":67,"sourceCodeEnd":103,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstacktasks/lblistener.go#L67-L103","documentation":"When the listener has no inline Pools, kOps fetches the listener's default pool by ID via cloud.GetPool. This error means that Octavia API lookup failed, so the listener's pool cannot be resolved during Find.","triggerScenarios":"Find → NewLBListenerTaskFromCloud where listener.DefaultPoolID is set but GetPool returns an error — the default pool was deleted directly in OpenStack (404) or the API call failed (403/network).","commonSituations":"Manual `openstack loadbalancer pool delete` while kops still expects it; credentials cannot read the pool; Octavia endpoint temporarily unavailable during `kops update cluster`.","solutions":["Check the inner error: 404 means the pool was deleted — recreate it via `kops update cluster` (delete listener or fix kops state) or restore the pool","Verify visibility/permissions: `openstack loadbalancer pool show <id>` with the same credentials","Retry after confirming the Octavia API is healthy"],"exampleFix":"// before: pool deleted out-of-band\nopenstack loadbalancer pool delete <pool-id>\nkops update cluster  // -> Fail to get pool with ID ...: 404\n// after: recreate pool or let kops rebuild\nkops delete cluster --name c --yes   # or recreate pool matching cluster spec\nkops update cluster --name c --yes","handlingStrategy":"validation","validationCode":"// Ensure the listener's default pool exists before updating\npool_id=$(openstack loadbalancer listener show $LISTENER_ID -f value -c pools | head -1)\nopenstack loadbalancer pool show $pool_id >/dev/null || echo 'default pool missing — recreate via kops'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never delete Octavia pools out-of-band while kops manages the cluster","Use the same project/credentials for manual inspection as kOps uses","Diff cloud state with `kops toolbox dump` after any manual Octavia change"],"tags":["openstack","octavia","pool","state-drift"],"backgroundTag":"cloud-resource-not-found","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"}