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

  1. Read the inner error to see which cloud call failed
  2. Confirm the listener's pool and its loadbalancer still exist: `openstack loadbalancer pool list`, `openstack loadbalancer show <lb>`
  3. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/a12795fe2bdf059c. Report an issue: GitHub.