diff --git a/pkg/client/factory.go b/pkg/client/factory.go index 5274345c5..73b7d3751 100644 --- a/pkg/client/factory.go +++ b/pkg/client/factory.go @@ -19,6 +19,7 @@ package client import ( "os" + apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" k8scheme "k8s.io/client-go/kubernetes/scheme" kbclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -156,6 +157,7 @@ func (f *factory) KubebuilderClient() (kbclient.Client, error) { velerov1api.AddToScheme(scheme) k8scheme.AddToScheme(scheme) apiextv1beta1.AddToScheme(scheme) + apiextv1.AddToScheme(scheme) kubebuilderClient, err := kbclient.New(clientConfig, kbclient.Options{ Scheme: scheme, }) diff --git a/pkg/cmd/cli/uninstall/uninstall.go b/pkg/cmd/cli/uninstall/uninstall.go index c8d56d53a..5c61142ca 100644 --- a/pkg/cmd/cli/uninstall/uninstall.go +++ b/pkg/cmd/cli/uninstall/uninstall.go @@ -26,9 +26,10 @@ import ( "github.com/spf13/pflag" corev1 "k8s.io/api/core/v1" + apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/labels" kubeerrs "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/wait" @@ -125,31 +126,36 @@ func Run(ctx context.Context, kbClient kbclient.Client, namespace string, waitTo } // CRDs - veleroLabels := labels.FormatLabels(install.Labels()) - crdList := apiextv1beta1.CustomResourceDefinitionList{} - opts := kbclient.ListOptions{ - Namespace: namespace, - Raw: &metav1.ListOptions{ - LabelSelector: veleroLabels, + + veleroLabelSelector := labels.SelectorFromSet(install.Labels()) + opts := []kbclient.DeleteAllOfOption{ + kbclient.InNamespace(namespace), + kbclient.MatchingLabelsSelector{ + Selector: veleroLabelSelector, }, } - if err := kbClient.List(context.Background(), &crdList, &opts); err != nil { - errs = append(errs, errors.WithStack(err)) - } else { - if len(crdList.Items) == 0 { - fmt.Print("Velero CRDs do not exist, skipping.\n") + v1CRDsRemoved := false + v1crd := &apiextv1.CustomResourceDefinition{} + if err := kbClient.DeleteAllOf(ctx, v1crd, opts...); err != nil { + if meta.IsNoMatchError(err) { + fmt.Println("V1 Velero CRDs not found, skipping...") } else { - veleroLabelSelector := labels.SelectorFromSet(install.Labels()) - opts := []kbclient.DeleteAllOfOption{ - kbclient.InNamespace(namespace), - kbclient.MatchingLabelsSelector{ - Selector: veleroLabelSelector, - }, - } - crd := &apiextv1beta1.CustomResourceDefinition{} - if err := kbClient.DeleteAllOf(ctx, crd, opts...); err != nil { - errs = append(errs, errors.WithStack(err)) + errs = append(errs, errors.WithStack(err)) + } + } else { + v1CRDsRemoved = true + } + + // Remove any old Velero v1beta1 CRDs hanging around. + v1beta1crd := &apiextv1beta1.CustomResourceDefinition{} + if err := kbClient.DeleteAllOf(ctx, v1beta1crd, opts...); err != nil { + if meta.IsNoMatchError(err) { + if !v1CRDsRemoved { + // Only mention this if there were no V1 CRDs removed + fmt.Println("V1Beta1 Velero CRDs not found, skipping...") } + } else { + errs = append(errs, errors.WithStack(err)) } }