Skip to content

Commit 8bae629

Browse files
committed
Decouple CRD and APIResourceSchema in service export request reconciler
Signed-off-by: Karol Szwaj <karol.szwaj@gmail.com> On-behalf-of: @SAP karol.szwaj@sap.com
1 parent b06359d commit 8bae629

2 files changed

Lines changed: 12 additions & 42 deletions

File tree

contrib/example-backend/controllers/serviceexportrequest/serviceexportrequest_controller.go

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"fmt"
2222
"time"
2323

24-
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2524
apiextensionsinformers "k8s.io/apiextensions-apiserver/pkg/client/informers/externalversions/apiextensions/v1"
2625
apiextensionslisters "k8s.io/apiextensions-apiserver/pkg/client/listers/apiextensions/v1"
2726
"k8s.io/apimachinery/pkg/api/errors"
@@ -95,9 +94,6 @@ func NewController(
9594
reconciler: reconciler{
9695
informerScope: scope,
9796
clusterScopedIsolation: isolation,
98-
getCRD: func(name string) (*apiextensionsv1.CustomResourceDefinition, error) {
99-
return crdInformer.Lister().Get(name)
100-
},
10197
getAPIResourceSchema: func(ctx context.Context, name string) (*kubebindv1alpha2.APIResourceSchema, error) {
10298
return apiResourceSchemaInformer.Lister().Get(name)
10399
},
@@ -159,13 +155,13 @@ func NewController(
159155

160156
if _, err := crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
161157
AddFunc: func(obj any) {
162-
c.enqueueCRD(logger, obj)
158+
c.enqueueAPIResourceSchema(logger, obj)
163159
},
164160
UpdateFunc: func(old, newObj any) {
165-
c.enqueueCRD(logger, newObj)
161+
c.enqueueAPIResourceSchema(logger, newObj)
166162
},
167163
DeleteFunc: func(obj any) {
168-
c.enqueueCRD(logger, obj)
164+
c.enqueueAPIResourceSchema(logger, obj)
169165
},
170166
}); err != nil {
171167
return nil, err
@@ -235,14 +231,14 @@ func (c *Controller) enqueueServiceExport(logger klog.Logger, obj any) {
235231
}
236232
}
237233

238-
func (c *Controller) enqueueCRD(logger klog.Logger, obj any) {
239-
crdKey, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
234+
func (c *Controller) enqueueAPIResourceSchema(logger klog.Logger, obj any) {
235+
APIResourceSchemaKey, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
240236
if err != nil {
241237
runtime.HandleError(err)
242238
return
243239
}
244240

245-
requests, err := c.serviceExportRequestIndexer.ByIndex(indexers.ServiceExportRequestByGroupResource, crdKey)
241+
requests, err := c.serviceExportRequestIndexer.ByIndex(indexers.ServiceExportRequestByGroupResource, APIResourceSchemaKey)
246242
if err != nil {
247243
runtime.HandleError(err)
248244
return
@@ -253,7 +249,7 @@ func (c *Controller) enqueueCRD(logger klog.Logger, obj any) {
253249
runtime.HandleError(err)
254250
continue
255251
}
256-
logger.V(2).Info("queueing APIServiceExportRequest", "key", key, "reason", "CustomResourceDefinition", "CustomResourceDefinitionKey", crdKey)
252+
logger.V(2).Info("queueing APIServiceExportRequest", "key", key, "reason", "APIResourceSchema", "APIResourceSchemaKey", APIResourceSchemaKey)
257253
c.queue.Add(key)
258254
}
259255
}

contrib/example-backend/controllers/serviceexportrequest/serviceexportrequest_reconcile.go

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ type reconciler struct {
3636
informerScope kubebindv1alpha2.InformerScope
3737
clusterScopedIsolation kubebindv1alpha2.Isolation
3838

39-
getCRD func(name string) (*apiextensionsv1.CustomResourceDefinition, error)
4039
getAPIResourceSchema func(ctx context.Context, name string) (*kubebindv1alpha2.APIResourceSchema, error)
4140
getServiceExport func(ns, name string) (*kubebindv1alpha2.APIServiceExport, error)
4241
createServiceExport func(ctx context.Context, resource *kubebindv1alpha2.APIServiceExport) (*kubebindv1alpha2.APIServiceExport, error)
@@ -58,44 +57,22 @@ func (r *reconciler) reconcile(ctx context.Context, req *kubebindv1alpha2.APISer
5857

5958
func (r *reconciler) ensureExports(ctx context.Context, req *kubebindv1alpha2.APIServiceExportRequest) error {
6059
logger := klog.FromContext(ctx)
61-
6260
if req.Status.Phase == kubebindv1alpha2.APIServiceExportRequestPhasePending {
63-
failure := false
6461
for _, res := range req.Spec.Resources {
65-
// backend is created using CRD's as backup. But this is not required.
6662
name := res.Resource + "." + res.Group
67-
6863
apiResourceSchema, err := r.getAPIResourceSchema(ctx, name)
69-
switch {
70-
case apierrors.IsNotFound(err):
71-
logger.V(1).Info("APIResourceSchema not found, continuing with fallback to CRD conversion to APIResourceSchema", "name", name)
72-
crd, err := r.getCRD(name)
73-
if err != nil && !apierrors.IsNotFound(err) {
74-
return err
75-
}
64+
if err != nil {
7665
if apierrors.IsNotFound(err) {
7766
conditions.MarkFalse(
7867
req,
7968
kubebindv1alpha2.APIServiceExportRequestConditionExportsReady,
80-
"CRDNotFound",
69+
"APIResourceSchemaNotFound",
8170
conditionsapi.ConditionSeverityError,
82-
"CustomResourceDefinition %s in the service provider cluster not found",
71+
"APIResourceSchema %s in the service provider cluster not found",
8372
name,
8473
)
85-
failure = true
86-
break
87-
}
88-
schema, err := helpers.CRDToAPIResourceSchema(crd, "")
89-
if err != nil {
9074
return err
9175
}
92-
schema.Namespace = req.Namespace
93-
94-
logger.V(1).Info("Creating APIResourceSchema", "name", schema.Name, "namespace", schema.Namespace)
95-
if apiResourceSchema, err = r.createAPIResourceSchema(ctx, schema); err != nil {
96-
return err
97-
}
98-
case err != nil:
9976
return err
10077
}
10178

@@ -134,11 +111,8 @@ func (r *reconciler) ensureExports(ctx context.Context, req *kubebindv1alpha2.AP
134111
}
135112
}
136113

137-
if !failure {
138-
conditions.MarkTrue(req, kubebindv1alpha2.APIServiceExportRequestConditionExportsReady)
139-
req.Status.Phase = kubebindv1alpha2.APIServiceExportRequestPhaseSucceeded
140-
return nil
141-
}
114+
conditions.MarkTrue(req, kubebindv1alpha2.APIServiceExportRequestConditionExportsReady)
115+
req.Status.Phase = kubebindv1alpha2.APIServiceExportRequestPhaseSucceeded
142116

143117
if time.Since(req.CreationTimestamp.Time) > time.Minute {
144118
req.Status.Phase = kubebindv1alpha2.APIServiceExportRequestPhaseFailed

0 commit comments

Comments
 (0)