kubernetes/kops · error

Failed to list pools: %v

Error message

Failed to list pools: %v

What it means

LBPool.Find lists Octavia pools via cloud.ListPools (GET /v2/lbaas/pools filtered by ID/Name). Any API-level failure of that listing — auth, connectivity, malformed response — is wrapped with this message. It means kOps could not complete the reconcile's discovery phase.

Source

Thrown at upup/pkg/fi/cloudup/openstacktasks/lbpool.go:94

		// Update all search terms
		find.ID = a.ID
		find.Name = a.Name
	}
	return a, nil
}

func (p *LBPool) Find(context *fi.CloudupContext) (*LBPool, error) {
	if p.Name == nil && p.ID == nil {
		return nil, nil
	}

	cloud := context.T.Cloud.(openstack.OpenstackCloud)
	poolList, err := cloud.ListPools(v2pools.ListOpts{
		ID:   fi.ValueOf(p.ID),
		Name: fi.ValueOf(p.Name),
	})
	if err != nil {
		return nil, fmt.Errorf("Failed to list pools: %v", err)
	}
	if len(poolList) == 0 {
		return nil, nil
	}
	if len(poolList) > 1 {
		return nil, fmt.Errorf("Multiple pools found for name %s", fi.ValueOf(p.Name))
	}

	return NewLBPoolTaskFromCloud(cloud, p.Lifecycle, &poolList[0], p)
}

func (s *LBPool) Run(context *fi.CloudupContext) error {
	return fi.CloudupDefaultDeltaRunMethod(s, context)
}

func (_ *LBPool) CheckChanges(a, e, changes *LBPool) error {
	if a == nil {
		if e.Name == nil {

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Inspect the wrapped error: for auth errors run `openstack token issue`; for endpoint errors run `openstack catalog list` and confirm octavia exists.
  2. Fix region/endpoint env vars (OS_REGION_NAME, OS_INTERFACE) so the load-balancer v2 endpoint resolves.
  3. Retry after transient 5xx/network errors — kops update is idempotent.
  4. Ensure the Octavia service is installed in the target cloud/region before using NLB load balancers.

Example fix

// before
export OS_REGION_NAME=RegionTwo  # octavia not deployed here
// after
export OS_REGION_NAME=RegionOne  # region with octavia endpoint
$ kops update cluster --name mycluster --yes
Defensive patterns

Strategy: retry

Validate before calling

// preflight: octavia endpoint resolvable and token valid
if _, err := openstackCatalogLookup("load-balancer", region); err != nil {
	return fmt.Errorf("octavia endpoint missing for region %s: %w", region, err)
}
if _, err := keystoneTokenIssue(); err != nil { return fmt.Errorf("auth failed: %w", err) }

Try / catch

err := retry.Do(func() error {
	_, err := kopsFindPools()
	if err == nil { return nil }
	if isTransient(err) { return retry.Unrecoverable(err) } // 401/404 of endpoint won't heal
	return err
}, retry.Attempts(3), retry.Delay(10*time.Second))

Prevention

When it happens

Trigger: Listing pools during `kops update/replace` when the Octavia endpoint is unreachable (network/DNS), the token is expired, or the service catalog lacks the load-balancer (octavia) endpoint for the region.

Common situations: Wrong OS_REGION_NAME so no octavia endpoint; Keystone auth failure; openstack load-balancer service not deployed in the cloud; transient 5xx from the Octavia API.

Related errors


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