@@ -343,7 +343,7 @@ func capiCRDHandler(gvk *schema.GroupVersionKind, action crd.ChangeType) {
343343 if action == crd .Modify {
344344 return
345345 }
346- if gvk .Group == clusterv1 .GroupVersion .Group {
346+ if gvk .Group == clusterv1 .GroupVersion .Group && gvk . Version == clusterv1 . GroupVersion . Version {
347347 setupLog .V (logs .LogInfo ).Info ("Initiating graceful restart due to CAPI CRD update" ,
348348 "GVK" , gvk .String (), "Action" , string (action ))
349349
@@ -353,8 +353,8 @@ func capiCRDHandler(gvk *schema.GroupVersionKind, action crd.ChangeType) {
353353 }
354354}
355355
356- // isCAPIInstalled returns true if CAPI is installed, false otherwise
357- func isCAPIInstalled (ctx context.Context , c client.Client ) (bool , error ) {
356+ // isCAPIInstalled returns true if CAPI is installed with v1beta2 served , false otherwise
357+ func isCAPIInstalled (ctx context.Context , c client.Client , logger logr. Logger ) (bool , error ) {
358358 clusterCRD := & apiextensionsv1.CustomResourceDefinition {}
359359
360360 err := c .Get (ctx , types.NamespacedName {Name : "clusters.cluster.x-k8s.io" }, clusterCRD )
@@ -365,7 +365,14 @@ func isCAPIInstalled(ctx context.Context, c client.Client) (bool, error) {
365365 return false , err
366366 }
367367
368- return true , nil
368+ for _ , version := range clusterCRD .Spec .Versions {
369+ if version .Name == clusterv1 .GroupVersion .Version && version .Served {
370+ return true , nil
371+ }
372+ }
373+
374+ logger .V (logs .LogInfo ).Info ("clusterCRD CRD present but v1beta2 not served" )
375+ return false , nil
369376}
370377
371378// fluxCRDHandler restarts process if a Flux CRD is updated
@@ -404,7 +411,7 @@ func capiWatchers(ctx context.Context, mgr ctrl.Manager, watchersForCAPI []watch
404411 const maxRetries = 20
405412 retries := 0
406413 for {
407- capiPresent , err := isCAPIInstalled (ctx , mgr .GetClient ())
414+ capiPresent , err := isCAPIInstalled (ctx , mgr .GetClient (), logger )
408415 if err != nil {
409416 if retries < maxRetries {
410417 logger .Info (fmt .Sprintf ("failed to verify if CAPI is present: %v" , err ))
0 commit comments