-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
What steps did you take and what happened:
$ clusterctl delete --all --include-crd --include-namespace -v 4
Deleting Provider="bootstrap-kubeadm" Version="v1.2.3" Namespace="capi-kubeadm-bootstrap-system"
Deleting Provider="control-plane-kubeadm" Version="v1.2.3" Namespace="capi-kubeadm-control-plane-system"
Deleting Provider="cluster-api" Version="v1.2.3" Namespace="capi-system"
Deleting Provider="infrastructure-ipam" Version="v1.2.0" Namespace="capm3-system" ## This is a provider installed by us
Error: failed to list objects for the "cluster.x-k8s.io/v1beta1, Kind=Machine" GroupVersionKind: action failed after 9 attempts: the server could not find the requested resource (get machines.cluster.x-k8s.io)
$ clusterctl delete --all --include-crd --include-namespace -v 4
Error: failed to check Cluster API version: customresourcedefinitions.apiextensions.k8s.io "clusters.cluster.x-k8s.io" not found
$ k get crd |grep x-k8s
providers.clusterctl.cluster.x-k8s.io 2022-10-14T10:40:16Z
What did you expect to happen:
After the 1st run of clusterctl failed, we're able to run the clusterctl again and it deletes all remaining providers.
Anything else you would like to add:
The 2nd run of clusterctl failed because clusterctl requires the "clusters.cluster.x-k8s.io" CRD must exist (see source code) but this CRD was already deleted in the 1st run of clusterctl.
If I manually create the "clusters.cluster.x-k8s.io" CRD (similiar to clusterClient.ProviderInventory().EnsureCustomResourceDefinitions()
at L74 in delete.go), the 2nd run of clusterctl is able to delete all remaining providers. If the 2nd run failed too due to failed to list objects for the ...
, we can run clusterctl multi times until it succeeds.
So my question is:
- is calling CheckCAPIContract() necessary at the beginning of clusterctl delete? CheckCAPIContract() ensures CAPI is installed by checking "clusters.cluster.x-k8s.io" CRD existence.
- or can we add the option CheckCAPIContractOption.AllowCAPINotInstalled in DeleteOptions and pass it to CheckCAPIContract(options ...CheckCAPIContractOption)?
Environment:
- clusterctl version: &version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.3", GitCommit:"bb377163f141d69b7a61479756ee96891f6670bd", GitTreeState:"clean", BuildDate:"2022-10-10T12:30:14Z", GoVersion:"go1.18.7", Compiler:"gc", Platform:"darwin/arm64"}
- kind version: kind v0.12.0 go1.17.8 darwin/arm64,
- Kubernetes version: (use
kubectl version
): v1.23.4 - OS (e.g. from
/etc/os-release
):
/kind bug
/area clusterctl