kubernetes/kops · error

failed to list members: %v

Error message

failed to list members: %v

What it means

Wraps an error from the OpenStack Octavia v2 pools.ListMembers paginated call inside listPoolMembers. The retry loop aborts when AllPages fails, attaching the underlying API error (auth, 404 pool, connectivity, etc.).

Source

Thrown at upup/pkg/fi/cloudup/openstack/loadbalancer.go:468

		}
		return pool, err
	}
	return pool, nil
}

func (c *openstackCloud) ListPoolMembers(poolID string, opts v2pools.ListMembersOpts) (memberList []v2pools.Member, err error) {
	return listPoolMembers(c, poolID, opts)
}

func listPoolMembers(c OpenstackCloud, poolID string, opts v2pools.ListMembersOpts) (memberList []v2pools.Member, err error) {
	if c.LoadBalancerClient() == nil {
		return memberList, fmt.Errorf("loadbalancer support not available in this deployment")
	}

	done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
		memberPage, err := v2pools.ListMembers(c.LoadBalancerClient(), poolID, opts).AllPages(context.TODO())
		if err != nil {
			return false, fmt.Errorf("failed to list members: %v", err)
		}
		memberList, err = v2pools.ExtractMembers(memberPage)
		if err != nil {
			return false, fmt.Errorf("failed to extract members: %v", err)
		}
		return true, nil
	})
	if !done {
		if err == nil {
			err = wait.ErrWaitTimeout
		}
		return memberList, err
	}
	return memberList, nil
}

func (c *openstackCloud) ListPools(opts v2pools.ListOpts) (poolList []v2pools.Pool, err error) {
	return listPools(c, opts)

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Inspect the wrapped inner error for the root cause (auth vs 404 vs connectivity)
  2. Re-authenticate: verify OS_USERNAME/OS_PASSWORD/OS_TOKEN and project scope are valid
  3. Confirm the poolID exists via `openstack loadbalancer member list <pool>`
  4. Verify connectivity to the Octavia public endpoint and that Octavia service is healthy

Example fix

null
Defensive patterns

Strategy: retry

Validate before calling

// validate pool exists first
pools, err := cloud.ListPools(v2pools.ListOpts{Name: poolName})
if err != nil || len(pools) == 0 { return fmt.Errorf("pool %q not found", poolName) }

Try / catch

members, err := cloud.ListPoolMembers(poolID, opts)
if err != nil {
	if strings.Contains(err.Error(), "401") || strings.Contains(err.Error(), "authentication") {
		// re-authenticate and retry once
	}
	return fmt.Errorf("listing members for pool %s: %w", poolID, err)
}

Prevention

When it happens

Trigger: v2pools.ListMembers(...).AllPages(context.TODO()) returns a non-nil error: invalid/expired token, nonexistent pool ID, Octavia endpoint unreachable, timeout, or API returning 4xx/5xx — retried readBackoff times before being returned wrapped.

Common situations: Wrong OS_* credentials or expired token; pool deleted concurrently by another reconciler; Octavia service down or endpoint misconfigured; network partition between kops and the OpenStack API.

Related errors


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