{"record":{"id":"7a5d26b9c40bf383","repo":"kubernetes/kops","slug":"failed-to-create-pool-v","errorCode":null,"errorMessage":"failed to create pool: %v","messagePattern":"failed to create pool: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstack/loadbalancer.go","lineNumber":443,"sourceCode":"\t\t}\n\t\treturn association, err\n\t}\n\treturn association, nil\n}\n\nfunc (c *openstackCloud) CreatePool(opts v2pools.CreateOpts) (pool *v2pools.Pool, err error) {\n\treturn createPool(c, opts)\n}\n\nfunc createPool(c OpenstackCloud, opts v2pools.CreateOpts) (pool *v2pools.Pool, err error) {\n\tif c.LoadBalancerClient() == nil {\n\t\treturn nil, fmt.Errorf(\"loadbalancer support not available in this deployment\")\n\t}\n\n\tdone, err := vfs.RetryWithBackoff(writeBackoff, func() (bool, error) {\n\t\tpool, err = v2pools.Create(context.TODO(), c.LoadBalancerClient(), opts).Extract()\n\t\tif err != nil {\n\t\t\treturn false, fmt.Errorf(\"failed to create pool: %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 pool, err\n\t}\n\treturn pool, nil\n}\n\nfunc (c *openstackCloud) ListPoolMembers(poolID string, opts v2pools.ListMembersOpts) (memberList []v2pools.Member, err error) {\n\treturn listPoolMembers(c, poolID, opts)\n}\n\nfunc listPoolMembers(c OpenstackCloud, poolID string, opts v2pools.ListMembersOpts) (memberList []v2pools.Member, err error) {\n\tif c.LoadBalancerClient() == nil {","sourceCodeStart":425,"sourceCodeEnd":461,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstack/loadbalancer.go#L425-L461","documentation":"Wrapped failure from v2pools.Create in createPool's writeBackoff loop: Octavia rejected pool creation (or returned unextractable data). The retry loop keeps the last attempt's error, which is embedded via %v.","triggerScenarios":"CreatePool called with invalid CreateOpts (unknown listener_id, unsupported LB algorithm/protocol, wrong provider), 409 while the parent LB/listener is in PENDING state, quota exceeded, or 404 listener/loadbalancer vanished.","commonSituations":"Invalid lb algorithms or protocols in the cluster spec for the deployed Octavia version; rapid creation racing Octavia provisioning (PENDING states); quota limits on pools/listeners in shared projects.","solutions":["Inspect the wrapped %v error for HTTP status: 409 means parent object pending — retry after provisioning settles (the loop already retries; ensure backoff is long enough).","Validate CreateOpts against your Octavia version (allowed lb_algorithm values ROUND_ROBIN/LEAST_CONNECTIONS/SOURCE_IP; supported protocols).","Check quotas for pools (`openstack quota show`) and the listener_id/loadbalancer_id values passed in opts.","Confirm the Octavia provider (e.g. amphorae) can actually provision; image/amp failures surface as creation errors."],"exampleFix":"// before\nopts := v2pools.CreateOpts{ListenerID: listenerID, Protocol: \"HTTP\", LBMethod: \"round_robin\"} // invalid enum casing\n// after\nopts := v2pools.CreateOpts{ListenerID: listenerID, Protocol: \"HTTP\", LBMethod: v2pools.LBMethodRoundRobin}","handlingStrategy":"retry","validationCode":"for _, allowed := range []string{\"ROUND_ROBIN\", \"LEAST_CONNECTIONS\", \"SOURCE_IP\"} {\n\tif opts.LBMethod == allowed {\n\t\tgoto ok\n\t}\n}\nreturn fmt.Errorf(\"invalid lb_algorithm %q\", opts.LBMethod)","typeGuard":null,"tryCatchPattern":"pool, err := cloud.CreatePool(opts)\nif err != nil {\n\tif strings.Contains(err.Error(), \"409\") || strings.Contains(err.Error(), \"Conflict\") {\n\t\treturn retryAfterLBSettles(opts) // parent LB/listener pending\n\t}\n\tif strings.Contains(err.Error(), \"quota\") {\n\t\treturn ErrQuotaExceeded\n\t}\n\treturn fmt.Errorf(\"create pool failed: %w\", err)\n}","preventionTips":["Use v2pools.LBMethod* constants instead of raw strings for LBMethod/Protocol.","Ensure the parent listener/loadbalancer is ACTIVE before creating pools.","Check quotas and provider capacity (amphorae) before large batch creations."],"tags":["openstack","octavia","create-pool","api-call"],"backgroundTag":"octavia-pool-create-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"}