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 {
			continue

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check Scaleway credentials are valid: scw instance server list zone=<zone>
  2. Grant IAM permission to list instances in the cluster's project
  3. Verify SCW_DEFAULT_ZONE/SCW_DEFAULT_REGION (or cluster config) point at the cluster's zone
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/455b1591f2f60253. Report an issue: GitHub.