kubernetes/kops · error
delete on clusters on %q not (yet) supported
Error message
delete on clusters on %q not (yet) supported
What it means
ListResources discovers all cloud resources belonging to a cluster for deletion. When the cluster's cloud provider does not have a case in the provider switch (and no resource collector is implemented), the default branch returns this error. It signals that kOps cannot enumerate resources on that provider, so `kops delete cluster` cannot proceed safely.
Source
Thrown at pkg/resources/ops/collector.go:74
return gce.ListResourcesGCE(cloud.(cloudgce.GCECloud), clusterInfo)
case kops.CloudProviderHetzner:
return hetzner.ListResources(cloud.(cloudhetzner.HetznerCloud), clusterInfo)
case kops.CloudProviderOpenstack:
return openstack.ListResources(cloud.(cloudopenstack.OpenstackCloud), clusterInfo)
case kops.CloudProviderAzure:
clusterInfo.AzureStorageAccountID = cluster.Spec.CloudProvider.Azure.StorageAccountID
clusterInfo.AzureSubscriptionID = cluster.Spec.CloudProvider.Azure.SubscriptionID
clusterInfo.AzureResourceGroupName = cluster.AzureResourceGroupName()
clusterInfo.AzureResourceGroupShared = cluster.IsSharedAzureResourceGroup()
clusterInfo.AzureNetworkShared = cluster.SharedVPC()
clusterInfo.AzureRouteTableShared = cluster.IsSharedAzureRouteTable()
return azure.ListResourcesAzure(cloud.(cloudazure.AzureCloud), clusterInfo)
case kops.CloudProviderScaleway:
return scaleway.ListResources(cloud.(cloudscaleway.ScwCloud), clusterInfo)
case kops.CloudProviderLinode:
return resourcelinode.ListResources(cloud.(cloudlinode.LinodeCloud), clusterInfo)
default:
return nil, fmt.Errorf("delete on clusters on %q not (yet) supported", cloud.ProviderID())
}
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Check the provider switch in pkg/resources/ops/collector.go and confirm your provider is supported for deletion
- Upgrade kOps to a version that implements ListResources for your cloud provider
- Delete the resources manually in the cloud console/CLI after verifying no other cluster shares them
- Implement a ListResources collector for the provider and add a switch case (contribute upstream)
- Re-run with --yes only after manually confirming all resources are removed; remove stale state with `kops delete cluster` alternatives
Example fix
// before (unsupported provider) kops delete cluster --name mycluster // error: delete on clusters on "openstack-nebula" not (yet) supported // after kops delete cluster --name mycluster --cloud aws # use a supported provider // or manually remove resources then delete cluster state
Defensive patterns
Strategy: validation
Validate before calling
// Before calling delete, verify provider support
supported := map[kops.CloudProviderID]bool{
kops.CloudProviderAWS: true, kops.CloudProviderGCE: true,
kops.CloudProviderAzure: true, kops.CloudProviderScaleway: true,
kops.CloudProviderLinode: true,
}
if !supported[cloud.ProviderID()] {
return fmt.Errorf("provider %q has no delete support; clean up manually", cloud.ProviderID())
} Try / catch
if err := ops.DeleteResources(cloud, res, 10, interval, wait); err != nil {
if strings.Contains(err.Error(), "not (yet) supported") {
klog.Warningf("provider %s unsupported for delete; handle cleanup externally", cloud.ProviderID())
return errSkipCloudCleanup
}
return err
} Prevention
- Only run delete clusters on providers with a case in pkg/resources/ops/collector.go
- Keep kOps current for newer providers
- Verify cluster spec's cloud provider before delete automation
When it happens
Trigger: Running `kops delete cluster --count ...` (or any flow calling ListResources in pkg/resources/ops/collector.go:74) against a cluster whose CloudProviderID falls through the switch — e.g. an unsupported or newly added provider like a alpha/experimental provider not wired into the collector, or a corrupted providerID value.
Common situations: Users created a cluster on a provider with experimental/unsupported support (e.g. some providers beyond aws/gce/azure/scaleway/linode) and then attempt cluster deletion; or a kOps upgrade added a provider but the delete collector wasn't ported; or providerID is misreported due to a broken cluster spec.
Related errors
- reading from stdin: %v
- reading file %q: %v
- building cloud: %w
- error reading Keyset %q: %v
- error removing file %s: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/278fbeb829a89de6.
Report an issue: GitHub.