{"record":{"id":"a7085f79499c24b1","repo":"kubernetes/kops","slug":"deleting-cloud-instance-s-of-group-s-w","errorCode":null,"errorMessage":"deleting cloud instance %s of group %s: %w","messagePattern":"deleting cloud instance (.+?) of group (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/scaleway/cloud.go","lineNumber":243,"sourceCode":"\t\terr := s.DeleteInstance(cloudInstance)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error deleting group %q: %w\", group.HumanName, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *scwCloudImplementation) DeleteInstance(i *cloudinstances.CloudInstance) error {\n\tserver, err := s.instanceAPI.GetServer(&instance.GetServerRequest{\n\t\tZone:     s.zone,\n\t\tServerID: i.ID,\n\t})\n\tif err != nil {\n\t\tif is404Error(err) {\n\t\t\tklog.V(4).Infof(\"error deleting cloud instance %s of group %s : instance was already deleted\", i.ID, i.CloudInstanceGroup.HumanName)\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(\"deleting cloud instance %s of group %s: %w\", i.ID, i.CloudInstanceGroup.HumanName, err)\n\t}\n\n\terr = s.DeleteServer(server.Server)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"deleting cloud instance %s of group %s: %w\", i.ID, i.CloudInstanceGroup.HumanName, err)\n\t}\n\n\treturn nil\n}\n\nfunc (s *scwCloudImplementation) DeregisterInstance(i *cloudinstances.CloudInstance) error {\n\tserver, err := s.instanceAPI.GetServer(&instance.GetServerRequest{\n\t\tZone:     s.zone,\n\t\tServerID: i.ID,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"deregistering cloud instance %s of group %q: %w\", i.ID, i.CloudInstanceGroup.HumanName, err)\n\t}","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/scaleway/cloud.go#L225-L261","documentation":"DeleteInstance first calls instanceAPI.GetServer then DeleteServer via the Scaleway instance API. A 404 is treated as success (already deleted); any other error from the GetServer call is wrapped as \"deleting cloud instance %s of group %s: %w\". This error means the instance could not even be looked up before deletion.","triggerScenarios":"instanceAPI.GetServer(&instance.GetServerRequest{Zone: s.zone, ServerID: i.ID}) fails with a non-404 error: invalid/expired credentials, wrong zone configured, server ID not a UUID, permission denied, or transient API/network failure.","commonSituations":"Cluster tags specify a zone different from the zone in the Scaleway profile; stale instance-group state referencing a server removed out-of-band in another zone; IAM key without servers:read scope; Scaleway API outage.","solutions":["Check the wrapped Scaleway error type (scw response error status) for 403/404/unknown-zone details.","Confirm the configured zone (cluster tags 'zone' or SCW profile default zone) matches where the server actually lives.","Ensure the credentials/IAM policy allow reading servers (servers:read) in the project.","If the server was already deleted elsewhere, nothing is needed — verify the ID is correct and retry."],"exampleFix":"// before: zone mismatch\nzone = scw.Zone(\"nl-ams-1\") // server is in fr-par-1\n// after\nzone = scw.Zone(\"fr-par-1\")","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"err := cloud.DeleteInstance(inst)\nif err != nil {\n  var respErr *scw.ResponseError\n  if errors.As(err, &respErr) {\n    switch respErr.StatusCode {\n    case 403:\n      klog.Errorf(\"permission denied deleting %s — check IAM servers:delete\", inst.ID)\n    case 404:\n      klog.Infof(\"instance %s already deleted\", inst.ID)\n    default:\n      klog.Errorf(\"delete failed for %s: %v\", inst.ID, err)\n    }\n  }\n  return err\n}","preventionTips":["Verify cluster tags' zone matches the servers' actual zone.","Test credentials with a read-only Scaleway API call before destructive operations.","Watch for out-of-band console deletions that leave kops state stale."],"tags":["scaleway","instance-api","delete","lookup"],"backgroundTag":"cloud-api-request-failed","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}