kubernetes/kops · error

Fail to get pool with ID: %s: %v

Error message

Fail to get pool with ID: %s: %v

What it means

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.

Source

Thrown at upup/pkg/fi/cloudup/openstacktasks/lblistener.go:85

		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 {
		// Update all search terms
		find.ID = listenerTask.ID
		find.Name = listenerTask.Name
		find.Pool = listenerTask.Pool
	}
	return listenerTask, nil
}

func (s *LBListener) Find(context *fi.CloudupContext) (*LBListener, error) {
	if s.Name == nil {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. 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
  2. Verify visibility/permissions: `openstack loadbalancer pool show <id>` with the same credentials
  3. Retry after confirming the Octavia API is healthy

Example fix

// before: pool deleted out-of-band
openstack loadbalancer pool delete <pool-id>
kops update cluster  // -> Fail to get pool with ID ...: 404
// after: recreate pool or let kops rebuild
kops delete cluster --name c --yes   # or recreate pool matching cluster spec
kops update cluster --name c --yes
Defensive patterns

Strategy: validation

Validate before calling

// Ensure the listener's default pool exists before updating
pool_id=$(openstack loadbalancer listener show $LISTENER_ID -f value -c pools | head -1)
openstack loadbalancer pool show $pool_id >/dev/null || echo 'default pool missing — recreate via kops'

Prevention

When it happens

Trigger: 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).

Common situations: Manual `openstack loadbalancer pool delete` while kops still expects it; credentials cannot read the pool; Octavia endpoint temporarily unavailable during `kops update cluster`.

Related errors


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