kubernetes/kops · error

error listing servers %v: %v

Error message

error listing servers %v: %v

What it means

listInstances wraps any error from the Nova servers.List AllPages call — i.e. the paged query of servers matching the given ListOptsBuilder failed. It is retried via vfs.RetryWithBackoff(readBackoff) and the final error is wrapped with the list options for context.

Source

Thrown at upup/pkg/fi/cloudup/openstack/instance.go:352

		return server, err
	} else if done {
		return server, nil
	} else {
		return server, wait.ErrWaitTimeout
	}
}

func (c *openstackCloud) ListInstances(opt servers.ListOptsBuilder) ([]servers.Server, error) {
	return listInstances(c, opt)
}

func listInstances(c OpenstackCloud, opt servers.ListOptsBuilder) ([]servers.Server, error) {
	var instances []servers.Server

	done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
		allPages, err := servers.List(c.ComputeClient(), opt).AllPages(context.TODO())
		if err != nil {
			return false, fmt.Errorf("error listing servers %v: %v", opt, err)
		}

		ss, err := servers.ExtractServers(allPages)
		if err != nil {
			return false, fmt.Errorf("error extracting servers from pages: %v", err)
		}
		instances = ss
		return true, nil
	})
	if err != nil {
		return instances, err
	} else if done {
		return instances, nil
	} else {
		return instances, wait.ErrWaitTimeout
	}
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the wrapped %v error: a 400 usually means an invalid filter in the ListOpts — verify the filter fields are supported by your Nova version
  2. Re-authenticate and confirm the compute endpoint is reachable (`openstack server list` works with the same credentials)
  3. Retry later if it's a 5xx/service outage; the built-in readBackoff already retries transiently
  4. Reduce filter complexity or page size if large listings time out

Example fix

// before: unsupported filter field
opt := servers.ListOpts{"invalid-field": "x"}
// after: use supported filters, e.g. tags
opt := servers.ListOpts{"tags": kopsTag}
Defensive patterns

Strategy: retry

Validate before calling

// validate list options before calling
opts := servers.ListOpts{"tags": kopsTag}
for k := range opts {
    if !supportedNovaListFilters[k] { return fmt.Errorf("unsupported filter: %s", k) }
}

Try / catch

instances, err := ListInstances(cloud, opts)
if err != nil && strings.Contains(err.Error(), "error listing servers") {
    // transient API issue — retry read-only list
    time.Sleep(5 * time.Second)
    instances, err = ListInstances(cloud, opts)
}

Prevention

When it happens

Trigger: servers.List(...).AllPages fails: compute API endpoint unreachable, auth/token failure, invalid or unsupported filter fields in the ListOpts (400), or Nova returning 5xx while paging.

Common situations: Invalid tags/name filters in ListOpts that Nova rejects; Keystone credentials expired; OpenStack compute service outage; paginated listing hitting a timeout on very large deployments.

Related errors


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