kubernetes/kops · error
error extracting servers from pages: %v
Error message
error extracting servers from pages: %v
What it means
This error occurs when servers.ExtractServers fails to decode the pages returned by the Nova list-servers API into []servers.Server. It means the API responded, but the response body could not be parsed/extracted by gophercloud.
Source
Thrown at upup/pkg/fi/cloudup/openstack/instance.go:357
}
}
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
}
}
func (c *openstackCloud) GetFlavor(name string) (*flavors.Flavor, error) {
return getFlavor(c, name)
}
func getFlavor(c OpenstackCloud, name string) (*flavors.Flavor, error) {View on GitHub (pinned to 4c8573c808)
Solutions
- Log the raw response from the compute endpoint to see what body is actually being returned
- Check for proxies/gateways in front of the OpenStack API that may inject HTML error pages
- Upgrade/downgrade gophercloud to match your OpenStack release's response schema
- Retry; if transient middleware errors, the retry backoff may mask it — capture the raw body on failure
Defensive patterns
Strategy: retry
Try / catch
ss, err := listInstances(cloud, opts)
if err != nil && strings.Contains(err.Error(), "error extracting servers") {
// parse failure: capture raw response and retry once
log.Printf("non-JSON response from compute API; retrying")
ss, err = listInstances(cloud, opts)
} Prevention
- Ensure no proxy between the client and Nova rewrites/HTML-wraps responses
- Keep gophercloud SDK version aligned with your OpenStack release
- Pin API microversions if your distribution customizes response shapes
- Alert on non-JSON bodies from the compute endpoint
When it happens
Trigger: servers.ExtractServers returns an error: malformed or unexpected JSON from a proxy/middleware between kops and Nova, a non-standard Nova response shape, or an intercepted error page (e.g. HTML from a load balancer in front of the API).
Common situations: An API proxy/gateway returning HTML error pages with 200 status; mismatched gophercloud/openstack SDK versions producing incompatible response structs; a custom OpenStack distribution with non-standard server response fields.
Related errors
- failed to extract flavors: %v
- failed to extract storage availability zones: %v
- error building cinder client: %w
- error building neutron client: %w
- error building nova client: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/8f4e24d6b003f845.
Report an issue: GitHub.