kubernetes/kops · error

error listing servers: %v

Error message

error listing servers: %v

What it means

When rendering a new PoolAssociation (a == nil), RenderOpenstack lists Nova servers by a regex built from ServerPrefix to find the members to associate with the Octavia pool. If the Nova list-instances call fails, kOps wraps the gophercloud error with this message and aborts the render.

Source

Thrown at upup/pkg/fi/cloudup/openstacktasks/poolassociation.go:164

		if err != nil {
			// sometimes provisioning interfaces is slow, that is why we need retry the interface from the server
			return false, fmt.Errorf("Failed to get fixed ip for associated pool: %v", err)
		}
		return true, nil
	})
	if done {
		return memberAddress, nil
	}
	return memberAddress, err
}

func (_ *PoolAssociation) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes *PoolAssociation) error {
	if a == nil {
		serverList, err := t.Cloud.ListInstances(servers.ListOpts{
			Name: fmt.Sprintf("^%s", fi.ValueOf(e.ServerPrefix)),
		})
		if err != nil {
			return fmt.Errorf("error listing servers: %v", err)
		}

		for _, server := range serverList {
			val, ok := server.Metadata["k8s"]
			if !ok || val != fi.ValueOf(e.ClusterName) {
				continue
			}

			memberAddress, err := GetServerFixedIP(t.Cloud.ComputeClient(), &server, fi.ValueOf(e.InterfaceName))
			if err != nil {
				return err
			}

			member, err := t.Cloud.AssociateToPool(&server, fi.ValueOf(e.Pool.ID), v2pools.CreateMemberOpts{
				Name:         fi.ValueOf(e.Name),
				ProtocolPort: fi.ValueOf(e.ProtocolPort),
				SubnetID:     fi.ValueOf(e.Pool.Loadbalancer.VipSubnet),
				Address:      memberAddress,

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the wrapped gophercloud error for the Nova HTTP status code
  2. Re-authenticate if 401; confirm credentials still valid for the project
  3. Ensure ServerPrefix forms a valid regex (escape special characters) when editing the cluster spec
  4. Retry `kops update cluster` if Nova returned 5xx/timeout; check Nova service health

Example fix

// before
serverPrefix: "cluster.name(k8s)" // regex metachars
// after
serverPrefix: "cluster-name-k8s" // regex-safe prefix
Defensive patterns

Strategy: retry

Validate before calling

// pre-flight: credentials + compute reachability
if err := exec.Command("openstack", "token", "issue").Run(); err != nil {
	return fmt.Errorf("re-authenticate before updating cluster")
}

Type guard

func isRetryableNovaError(err error) bool {
	var gerr gophercloud.ErrUnexpectedResponseCode
	if errors.As(err, &gerr) {
		return gerr.Actual >= 500 || gerr.Actual == 401 || gerr.Actual == 429
	}
	return false
}

Try / catch

serverList, err := t.Cloud.ListInstances(servers.ListOpts{Name: prefixRegex})
if err != nil {
	if isRetryableNovaError(err) {
		return retryWithBackoff(backoff)
	}
	return fmt.Errorf("error listing servers: %v", err)
}

Prevention

When it happens

Trigger: t.Cloud.ListInstances(servers.ListOpts{Name: "^<prefix>"}) returns an error: Nova API 401 (expired token), 403 (policy denial), 5xx/timeout on the compute endpoint, or an invalid regex in the name filter rejected by the compute API.

Common situations: Keystone token expiring during long cluster updates; Nova control plane degraded/throttled while many instances are being created; ServerPrefix containing regex metacharacters producing an unsupported filter.

Related errors


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