kubernetes/kops · error

not making progress deleting resources; giving up

Error message

not making progress deleting resources; giving up

What it means

DeleteResources tracks how many consecutive iterations pass without any resource transitioning to Done. After `count` no-progress iterations (when count != 0), it concludes deletion is stuck and returns this error instead of looping forever. Unlike the timeout error, this indicates active failures, not just slowness.

Source

Thrown at pkg/resources/ops/delete.go:176

			wg.Wait()
		}

		if len(resourceMap) == len(done) {
			return nil
		}

		fmt.Printf("Not all resources deleted; waiting before reattempting deletion\n")
		for k := range resourceMap {
			if _, d := done[k]; d {
				continue
			}

			fmt.Printf("\t%s\n", k)
		}

		iterationsWithNoProgress++
		if iterationsWithNoProgress > count && count != 0 {
			return fmt.Errorf("not making progress deleting resources; giving up")
		}

		time.Sleep(interval)
	}
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Inspect the per-resource failure messages printed during the loop (the failed resources are listed) and fix root causes (IAM, dependency, region)
  2. Remove or resolve the blocking resource manually in the cloud, then re-run deletion
  3. Increase the count parameter to allow more retry iterations if failures are transient
  4. Verify credentials/region match the cluster; fix API errors causing every delete to fail
  5. Run with -v (klog verbosity) to see dependency skip messages and identify the stuck dependency chain

Example fix

// before: persistent auth failure on DeleteSnapshot
// IAM policy missing ec2:DeleteSnapshot → same resources fail every pass
// after: grant the permission, then re-run
// {"Effect":"Allow","Action":["ec2:DeleteSnapshot"],"Resource":"*"}
Defensive patterns

Strategy: try-catch

Validate before calling

// Pre-validate IAM permissions for resource types in the set before deleting
types := map[string]bool{}
for _, r := range resourceMap { types[r.Type] = true }
klog.Infof("resource types to delete: %v", types) // ensure credentials cover them all

Try / catch

err := ops.DeleteResources(cloud, resourceMap, count, interval, wait)
if err != nil && strings.Contains(err.Error(), "not making progress") {
    klog.Errorf("deletion stuck; inspect failed resources above and fix IAM/dependencies before retrying")
    // do not blind-retry; diagnose the repeatedly failing resource first
    return err
}

Prevention

When it happens

Trigger: DeleteResources (pkg/resources/ops/delete.go:176) reaches iterationsWithNoProgress > count because every pass the same resources fail to delete — e.g. an API returns a persistent error (auth failure, dependency conflict, resource not actually removable) so `failed` never drains.

Common situations: IAM permissions missing for deleting a specific resource type (e.g. ec2:DeleteVolume); a resource with a cloud-side dependency not modeled in depMap; API rate limits; region mismatch making deletes 404 repeatedly; deleting only a subset of a cluster where an unselected resource blocks others.

Related errors


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