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
- 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
- Re-authenticate and confirm the compute endpoint is reachable (`openstack server list` works with the same credentials)
- Retry later if it's a 5xx/service outage; the built-in readBackoff already retries transiently
- 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
- Only use Nova-supported filter fields in servers.ListOpts
- Verify `openstack server list` works with the same credentials before automation
- Handle 5xx from the compute API as transient
- Avoid huge unfiltered listings; scope by tag/name
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
- failed to list flavors: %v
- error building nova client: %v
- error describing Network: %v
- no decernable storage availability zone could be mapped to c
- error building nova client: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/312a129b3840a187.
Report an issue: GitHub.