kubernetes/kops · error
error finding instances: %w
Error message
error finding instances: %w
What it means
Instance.Find locates existing cluster servers by listing servers tagged with the cluster name and matching the instance name. Any failure from cloud.GetClusterServers (itself a ListServers call) is wrapped in this error, aborting the reconciliation for that instance.
Source
Thrown at upup/pkg/fi/cloudup/scalewaytasks/instance.go:78
var _ fi.CloudupHasDependencies = (*Instance)(nil)
func (s *Instance) GetDependencies(tasks map[string]fi.CloudupTask) []fi.CloudupTask {
var deps []fi.CloudupTask
for _, task := range tasks {
if _, ok := task.(*Volume); ok {
deps = append(deps, task)
}
}
return deps
}
func (s *Instance) Find(c *fi.CloudupContext) (*Instance, error) {
cloud := c.T.Cloud.(scaleway.ScwCloud)
servers, err := cloud.GetClusterServers(cloud.ClusterName(s.Tags), s.Name)
if err != nil {
return nil, fmt.Errorf("error finding instances: %w", err)
}
if len(servers) == 0 {
return nil, nil
}
// Check if servers updates are needed
var needsUpdate []string
for _, server := range servers {
// Check if server is already marked as needing update
alreadyTagged := false
for _, tag := range server.Tags {
if tag == scaleway.TagNeedsUpdate {
alreadyTagged = true
}
}
if alreadyTagged {
continueView on GitHub (pinned to 4c8573c808)
Solutions
- Check Scaleway credentials are valid: scw instance server list zone=<zone>
- Grant IAM permission to list instances in the cluster's project
- Verify SCW_DEFAULT_ZONE/SCW_DEFAULT_REGION (or cluster config) point at the cluster's zone
- Retry after transient failures or rate limits
Defensive patterns
Strategy: retry
Validate before calling
// preflight credential/permission check before Find
client, err := scw.NewClient(scw.WithProfile(profile))
if err != nil { return err }
if _, err := instance.NewAPI(client).ListServers(&instance.ListServersRequest{Zone: zone, Limit: 1}, scw.WithContext(ctx)); err != nil {
return fmt.Errorf("scaleway API preflight failed (check credentials/IAM): %w", err)
} Type guard
func isTransient(err error) bool {
var rerr *scw.ResponseError
return errors.As(err, &rerr) && (rerr.StatusCode == 429 || rerr.StatusCode >= 500)
} Try / catch
err := retry.Do(func() error {
servers, err := cloud.GetClusterServers(clusterName, s.Name)
if err != nil && isTransient(err) { return retry.RetryableError(err) }
if err != nil { return err }
return nil
}, retry.Attempts(3), retry.Delay(time.Second))
if err != nil { return fmt.Errorf("error finding instances: %w", err) } Prevention
- Run kops updates from a machine with valid, non-expired Scaleway credentials
- Set SCW_DEFAULT_ZONE/SCW_DEFAULT_REGION (or cluster config) to the cluster's zone
- Retry on 429/5xx with exponential backoff during rolling updates
When it happens
Trigger: cloud.GetClusterServers fails — typically a Scaleway ListServers API error: invalid credentials, permission denied, bad zone/project scope, rate limiting, or network failure.
Common situations: Expired or revoked Scaleway API key on the machine running kops, IAM policy without instance list permission, kops run in a zone/project different from the cluster's, or transient API outage/rate limit during kops update/rolling-update.
Related errors
- failed to get server %s: %w
- failed to get server %s: %w
- error listing Akamai (Linode) interfaces for instance %q: %w
- could not find IP for server %s
- failed to get IP for server %q: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/455b1591f2f60253.
Report an issue: GitHub.