kubernetes/kops · error
NewLBListenerTaskFromCloud: Failed to create new LBListener
Error message
NewLBListenerTaskFromCloud: Failed to create new LBListener task for pool %s: %v
What it means
While reconstructing an LBListener task from cloud state, kOps builds the associated LBPool task for each pool attached to the listener. This error wraps a failure from NewLBPoolTaskFromCloud, so the listener cannot be modeled during Find.
Source
Thrown at upup/pkg/fi/cloudup/openstacktasks/lblistener.go:75
return s.ID
}
func NewLBListenerTaskFromCloud(cloud openstack.OpenstackCloud, lifecycle fi.Lifecycle, listener *listeners.Listener, find *LBListener) (*LBListener, error) {
// sort for consistent comparison
sort.Strings(listener.AllowedCIDRs)
listenerTask := &LBListener{
ID: new(listener.ID),
Name: new(listener.Name),
Port: new(listener.ProtocolPort),
AllowedCIDRs: listener.AllowedCIDRs,
Lifecycle: lifecycle,
}
if len(listener.Pools) > 0 {
for _, pool := range listener.Pools {
poolTask, err := NewLBPoolTaskFromCloud(cloud, lifecycle, &pool, find.Pool)
if err != nil {
return nil, fmt.Errorf("NewLBListenerTaskFromCloud: Failed to create new LBListener task for pool %s: %v", pool.Name, err)
} else {
listenerTask.Pool = poolTask
// TODO: Support Multiple?
break
}
}
} else {
pool, err := cloud.GetPool(listener.DefaultPoolID)
if err != nil {
return nil, fmt.Errorf("Fail to get pool with ID: %s: %v", listener.DefaultPoolID, err)
}
poolTask, err := NewLBPoolTaskFromCloud(cloud, lifecycle, pool, find.Pool)
if err != nil {
return nil, fmt.Errorf("NewLBListenerTaskFromCloud: Failed to create new LBListener task for pool %s: %v", pool.Name, err)
}
listenerTask.Pool = poolTask
}
if find != nil {View on GitHub (pinned to 4c8573c808)
Solutions
- Read the inner error to see which cloud call failed
- Confirm the listener's pool and its loadbalancer still exist: `openstack loadbalancer pool list`, `openstack loadbalancer show <lb>`
- Re-run `kops update cluster`; if state is stale after manual cloud edits, remove the orphaned resources or fix kops state
Defensive patterns
Strategy: try-catch
Validate before calling
openstack loadbalancer pool list -f value -c ID -c Loadbalancers | while read id lb; do openstack loadbalancer pool show "$id" >/dev/null || echo "pool $id unreadable" done
Try / catch
poolTask, err := NewLBPoolTaskFromCloud(cloud, lifecycle, &pool, find.Pool)
if err != nil {
// transient Octavia failure: retry with backoff; else surface wrapped error
if isTransient(err) { return retryWithBackoff(err) }
return nil, fmt.Errorf("failed to build pool task for %s: %w", pool.Name, err)
} Prevention
- Avoid deleting LB pools directly in OpenStack; let kops manage lifecycle
- Run updates with valid, unexpired OpenStack credentials
- Check Octavia API health before large cluster updates
When it happens
Trigger: Find → NewLBListenerTaskFromCloud with listener.Pools non-empty, where NewLBPoolTaskFromCloud fails — usually a failed cloud API call to fetch the loadbalancer or pool details referenced by the pool record.
Common situations: Pool references a load balancer deleted out-of-band; transient Octavia API error during `kops update cluster`; permissions prevent reading pool/loadbalancer details.
Related errors
- failed to build load balancer client: %w
- error building lb client: %w
- loadbalancer API versions not found
- GetApiIngressStatus: Failed to list openstack loadbalancers:
- error deleting loadbalancer: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/a12795fe2bdf059c.
Report an issue: GitHub.