From e810f7a60e0028f302a5e4016690dcf8ac7505e0 Mon Sep 17 00:00:00 2001 From: "dmitry.koba" Date: Mon, 18 Mar 2024 14:14:00 +0300 Subject: [PATCH] Fix taking a crd that is not yet installed Signed-off-by: dmitry.koba --- pkg/webhook/conversion/crd_client_config.go | 23 ++++++++------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/pkg/webhook/conversion/crd_client_config.go b/pkg/webhook/conversion/crd_client_config.go index aaa0dd9e..3fafaab8 100644 --- a/pkg/webhook/conversion/crd_client_config.go +++ b/pkg/webhook/conversion/crd_client_config.go @@ -2,11 +2,12 @@ package conversion import ( "context" - "fmt" + "time" log "github.com/sirupsen/logrus" extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/klog/v2" klient "github.com/flant/kube-client/client" ) @@ -24,23 +25,17 @@ type CrdClientConfig struct { var SupportedConversionReviewVersions = []string{"v1", "v1beta1"} func (c *CrdClientConfig) Update() error { - client := c.KubeClient + var retryTimeout = 15 * time.Second + var client = c.KubeClient - listOpts := metav1.ListOptions{ - FieldSelector: "metadata.name=" + c.CrdName, - } - - crdList, err := client.ApiExt().CustomResourceDefinitions().List(context.TODO(), listOpts) +tryToGetCRD: + crd, err := client.ApiExt().CustomResourceDefinitions().Get(context.TODO(), c.CrdName, metav1.GetOptions{}) if err != nil { - return err + klog.Errorf("crd getting error: %s. Retry will be executed after %s seconds.", err, retryTimeout) + time.Sleep(retryTimeout) + goto tryToGetCRD } - if len(crdList.Items) == 0 { - return fmt.Errorf("crd/%s not found", c.CrdName) - } - - crd := crdList.Items[0] - if crd.Spec.Conversion == nil { crd.Spec.Conversion = new(extv1.CustomResourceConversion) }