{"record":{"id":"9a40e4e3862d9c58","repo":"kubernetes/kops","slug":"error-creating-poolmonitor-v","errorCode":null,"errorMessage":"error creating PoolMonitor: %v","messagePattern":"error creating PoolMonitor: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/openstacktasks/poolmonitor.go","lineNumber":115,"sourceCode":"\t}\n\treturn nil\n}\n\nfunc (_ *PoolMonitor) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes *PoolMonitor) error {\n\tif a == nil {\n\t\tklog.V(2).Infof(\"Creating PoolMonitor with Name: %q\", fi.ValueOf(e.Name))\n\n\t\tpoolMonitor, err := t.Cloud.CreatePoolMonitor(monitors.CreateOpts{\n\t\t\tName:           fi.ValueOf(e.Name),\n\t\t\tPoolID:         fi.ValueOf(e.Pool.ID),\n\t\t\tType:           monitors.TypeTCP,\n\t\t\tDelay:          10,\n\t\t\tTimeout:        5,\n\t\t\tMaxRetries:     3,\n\t\t\tMaxRetriesDown: 3,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error creating PoolMonitor: %v\", err)\n\t\t}\n\t\te.ID = new(poolMonitor.ID)\n\t}\n\treturn nil\n}\n","sourceCodeStart":97,"sourceCodeEnd":121,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/openstacktasks/poolmonitor.go#L97-L121","documentation":"This error is wrapped by PoolMonitor.RenderOpenstack when the call to the Openstack Octavia load-balancer pool monitor creation API (via t.Cloud.CreatePoolMonitor) fails. The liveness monitor (health check) for a load balancer pool could not be created with the supplied delay/timeout/retry settings. The original Openstack API error is preserved in the %v wrapping.","triggerScenarios":"Cluster spec defines a load balancer health monitor and RenderOpenstack invokes CreatePoolMonitor with Delay=10, Timeout=5, MaxRetries=3, MaxRetriesDown=3, but the Octavia API rejects or fails the request (bad pool ID, quota exceeded, auth failure, unsupported monitor type).","commonSituations":"Octavia service not deployed or disabled in the Openstack cloud; pool not yet created or wrong pool reference; project hit the health-monitor quota; neutron/octavia endpoint misconfigured in clouds.yaml; older Octavia versions not supporting some monitor fields.","solutions":["Check the wrapped inner error for the actual Octavia API failure cause","Verify the Octavia service is available in the cloud and the pool exists before monitor creation","Check project quotas for load balancer health monitors","Re-run kops; transient Openstack API failures are common and Render is retried at a higher level","Verify cloud credentials and endpoint configuration (clouds.yaml / OS_* env vars)"],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":"// ensure octavia is reachable before applying\n// openstack loadbalancer list  (via SDK: loadbalancers.List)\nif err := verifyOctaviaAvailable(cloud); err != nil {\n    return fmt.Errorf(\"octavia unavailable, skipping pool monitor creation: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"err := t.Cloud.CreatePoolMonitor(opt)\nif err != nil {\n    return fmt.Errorf(\"error creating PoolMonitor: %v\", err)\n}\n// treat as retryable unless the inner error is a 4xx validation/quota error","preventionTips":["Confirm Octavia service availability before provisioning load balancers","Check health-monitor quotas in the project","Validate pool exists before attaching a monitor","Retry Render on transient API failures"],"tags":["openstack","load-balancer","octavia"],"backgroundTag":"openstack-api-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"}