kubernetes/kops · error
failed to extract listeners: %v
Error message
failed to extract listeners: %v
What it means
Wraps a failure from listeners.ExtractListeners in listListeners. The listener-list response could not be decoded into []listeners.Listener — the JSON body deviates from the expected gophercloud schema.
Source
Thrown at upup/pkg/fi/cloudup/openstack/loadbalancer.go:530
}
func (c *openstackCloud) ListListeners(opts listeners.ListOpts) (listenerList []listeners.Listener, err error) {
return listListeners(c, opts)
}
func listListeners(c OpenstackCloud, opts listeners.ListOpts) (listenerList []listeners.Listener, err error) {
if c.LoadBalancerClient() == nil {
return listenerList, fmt.Errorf("loadbalancer support not available in this deployment")
}
done, err := vfs.RetryWithBackoff(readBackoff, func() (bool, error) {
listenerPage, err := listeners.List(c.LoadBalancerClient(), opts).AllPages(context.TODO())
if err != nil {
return false, fmt.Errorf("failed to list listeners: %v", err)
}
listenerList, err = listeners.ExtractListeners(listenerPage)
if err != nil {
return false, fmt.Errorf("failed to extract listeners: %v", err)
}
return true, nil
})
if !done {
if err == nil {
err = wait.ErrWaitTimeout
}
return listenerList, err
}
return listenerList, nil
}
func (c *openstackCloud) CreateListener(opts listeners.CreateOpts) (listener *listeners.Listener, err error) {
return createListener(c, opts)
}
func createListener(c OpenstackCloud, opts listeners.CreateOpts) (listener *listeners.Listener, err error) {
if c.LoadBalancerClient() == nil {View on GitHub (pinned to 4c8573c808)
Solutions
- Inspect the raw /v2/lbaas/listeners response body for the malformed portion
- Upgrade gophercloud (go get + make gomod) to a release matching your Octavia version
- Eliminate proxies/middleware that mutate the API response body
- Retry the operation if the response was transiently truncated
Example fix
null
Defensive patterns
Strategy: retry
Try / catch
ll, err := listListeners(c, opts)
if err != nil {
if strings.Contains(err.Error(), "failed to extract listeners") {
return fmt.Errorf("octavia listener payload undecodable: %w", err)
}
return err
} Prevention
- Upgrade gophercloud when upgrading Octavia
- Log raw response bodies on extraction failure for diagnosis
- Block proxies that inject HTML into API responses
When it happens
Trigger: listeners.ExtractListeners(listenerPage) errors after paging succeeds: HTML/invalid JSON body from a proxy, unknown field types from a mismatched Octavia version, or an embedded error document within the page.
Common situations: Octavia microversion newer than the pinned gophercloud version; middleware rewriting responses; truncated chunked transfer from a broken LB in front of the API.
Understand the failure class
Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.
Related errors
- failed to extract members: %v
- failed to extract pools: %v
- failed to build load balancer client: %w
- cluster configured to use octavia, but router was not config
- error building lb client: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/40fcdc7571a925e4.
Report an issue: GitHub.