{"record":{"id":"278fbeb829a89de6","repo":"kubernetes/kops","slug":"delete-on-clusters-on-q-not-yet-supported","errorCode":null,"errorMessage":"delete on clusters on %q not (yet) supported","messagePattern":"delete on clusters on %q not \\(yet\\) supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/resources/ops/collector.go","lineNumber":74,"sourceCode":"\t\treturn gce.ListResourcesGCE(cloud.(cloudgce.GCECloud), clusterInfo)\n\tcase kops.CloudProviderHetzner:\n\t\treturn hetzner.ListResources(cloud.(cloudhetzner.HetznerCloud), clusterInfo)\n\tcase kops.CloudProviderOpenstack:\n\t\treturn openstack.ListResources(cloud.(cloudopenstack.OpenstackCloud), clusterInfo)\n\tcase kops.CloudProviderAzure:\n\t\tclusterInfo.AzureStorageAccountID = cluster.Spec.CloudProvider.Azure.StorageAccountID\n\t\tclusterInfo.AzureSubscriptionID = cluster.Spec.CloudProvider.Azure.SubscriptionID\n\t\tclusterInfo.AzureResourceGroupName = cluster.AzureResourceGroupName()\n\t\tclusterInfo.AzureResourceGroupShared = cluster.IsSharedAzureResourceGroup()\n\t\tclusterInfo.AzureNetworkShared = cluster.SharedVPC()\n\t\tclusterInfo.AzureRouteTableShared = cluster.IsSharedAzureRouteTable()\n\t\treturn azure.ListResourcesAzure(cloud.(cloudazure.AzureCloud), clusterInfo)\n\tcase kops.CloudProviderScaleway:\n\t\treturn scaleway.ListResources(cloud.(cloudscaleway.ScwCloud), clusterInfo)\n\tcase kops.CloudProviderLinode:\n\t\treturn resourcelinode.ListResources(cloud.(cloudlinode.LinodeCloud), clusterInfo)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"delete on clusters on %q not (yet) supported\", cloud.ProviderID())\n\t}\n}\n","sourceCodeStart":56,"sourceCodeEnd":77,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/resources/ops/collector.go#L56-L77","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before (unsupported provider)\nkops delete cluster --name mycluster\n// error: delete on clusters on \"openstack-nebula\" not (yet) supported\n// after\nkops delete cluster --name mycluster --cloud aws # use a supported provider\n// or manually remove resources then delete cluster state","handlingStrategy":"validation","validationCode":"// Before calling delete, verify provider support\nsupported := map[kops.CloudProviderID]bool{\n    kops.CloudProviderAWS: true, kops.CloudProviderGCE: true,\n    kops.CloudProviderAzure: true, kops.CloudProviderScaleway: true,\n    kops.CloudProviderLinode: true,\n}\nif !supported[cloud.ProviderID()] {\n    return fmt.Errorf(\"provider %q has no delete support; clean up manually\", cloud.ProviderID())\n}","typeGuard":null,"tryCatchPattern":"if err := ops.DeleteResources(cloud, res, 10, interval, wait); err != nil {\n    if strings.Contains(err.Error(), \"not (yet) supported\") {\n        klog.Warningf(\"provider %s unsupported for delete; handle cleanup externally\", cloud.ProviderID())\n        return errSkipCloudCleanup\n    }\n    return err\n}","preventionTips":["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"],"tags":["cloud-provider","unsupported","delete","kops"],"backgroundTag":"unsupported-cloud-provider","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}