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
- Check the wrapped gophercloud error for the Nova HTTP status code
- Re-authenticate if 401; confirm credentials still valid for the project
- Ensure ServerPrefix forms a valid regex (escape special characters) when editing the cluster spec
- 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
- Refresh Keystone tokens before long-running cluster updates
- Keep ServerPrefix free of regex metacharacters
- Monitor Nova API health/throttling during cluster scale-up
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
- Failed to get fixed ip for associated pool: %v
- error building nova client: %v
- no decernable storage availability zone could be mapped to c
- error building nova client: %w
- failed to build load balancer client: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/07695cb7cb5e9a60.
Report an issue: GitHub.