Skip to content

Commit cb91839

Browse files
committed
Serve both v1alpha1 and v1alpha2 APIBindings in APIExport VW
Signed-off-by: Marko Mudrinić <[email protected]> On-behalf-of: @SAP [email protected]
1 parent 3037f91 commit cb91839

File tree

4 files changed

+21
-16
lines changed

4 files changed

+21
-16
lines changed

pkg/virtual/apiexport/builder/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func BuildVirtualWorkspace(
179179
cancelFn: cancelFn,
180180
}, nil
181181
},
182-
func(ctx context.Context, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error) {
182+
func(ctx context.Context, apibindingVersion string, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error) {
183183
restProvider, err := provideAPIExportFilteredRestStorage(ctx, impersonatedDynamicClientGetter, clusterName, apiExportName)
184184
if err != nil {
185185
return nil, err
@@ -188,7 +188,7 @@ func BuildVirtualWorkspace(
188188
return apiserver.CreateServingInfoFor(
189189
mainConfig,
190190
schemas.ApisKcpDevSchemas["apibindings"],
191-
apisv1alpha1.SchemeGroupVersion.Version,
191+
apibindingVersion,
192192
restProvider,
193193
)
194194
},

pkg/virtual/apiexport/controllers/apireconciler/apiexport_apireconciler_controller.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func NewAPIReconciler(
6262
apiResourceSchemaInformer apisv1alpha1informers.APIResourceSchemaClusterInformer,
6363
apiExportInformer apisv1alpha2informers.APIExportClusterInformer,
6464
createAPIDefinition CreateAPIDefinitionFunc,
65-
createAPIBindingAPIDefinition func(ctx context.Context, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error),
65+
createAPIBindingAPIDefinition func(ctx context.Context, apibindingVersion string, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error),
6666
) (*APIReconciler, error) {
6767
c := &APIReconciler{
6868
kcpClusterClient: kcpClusterClient,
@@ -138,7 +138,7 @@ type APIReconciler struct {
138138
queue workqueue.TypedRateLimitingInterface[string]
139139

140140
createAPIDefinition CreateAPIDefinitionFunc
141-
createAPIBindingAPIDefinition func(ctx context.Context, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error)
141+
createAPIBindingAPIDefinition func(ctx context.Context, apibindingVersion string, clusterName logicalcluster.Name, apiExportName string) (apidefinition.APIDefinition, error)
142142

143143
mutex sync.RWMutex // protects the map, not the values!
144144
apiSets map[dynamiccontext.APIDomainKey]apidefinition.APIDefinitionSet

pkg/virtual/apiexport/controllers/apireconciler/apiexport_apireconciler_reconcile.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -244,19 +244,20 @@ func (c *APIReconciler) reconcile(ctx context.Context, apiExport *apisv1alpha2.A
244244

245245
// always serve apibindings, either through a claim, or with this fallback
246246
if !claimsAPIBindings {
247-
d, err := c.createAPIBindingAPIDefinition(ctx, clusterName, apiExport.Name)
248-
if err != nil {
249-
// TODO(ncdc): would be nice to expose some sort of user-visible error
250-
logger.Error(err, "error creating api definition for apibindings")
251-
}
247+
for _, gvr := range []schema.GroupVersionResource{apisv1alpha1.SchemeGroupVersion.WithResource("apibindings"), apisv1alpha2.SchemeGroupVersion.WithResource("apibindings")} {
248+
d, err := c.createAPIBindingAPIDefinition(ctx, gvr.Version, clusterName, apiExport.Name)
249+
if err != nil {
250+
// TODO(ncdc): would be nice to expose some sort of user-visible error
251+
logger.Error(err, "error creating api definition for apibindings")
252+
}
252253

253-
gvr := apisv1alpha2.SchemeGroupVersion.WithResource("apibindings")
254-
newSet[gvr] = apiResourceSchemaApiDefinition{
255-
APIDefinition: d,
256-
}
257-
newGVRs = append(newGVRs, gvrString(gvr))
258-
if _, ok := oldSet[gvr]; ok {
259-
preservedGVR = append(preservedGVR, gvrString(gvr))
254+
newSet[gvr] = apiResourceSchemaApiDefinition{
255+
APIDefinition: d,
256+
}
257+
newGVRs = append(newGVRs, gvrString(gvr))
258+
if _, ok := oldSet[gvr]; ok {
259+
preservedGVR = append(preservedGVR, gvrString(gvr))
260+
}
260261
}
261262
}
262263

test/e2e/virtual/apiexport/virtualworkspace_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ func TestAPIExportVirtualWorkspace(t *testing.T) {
133133
require.NoError(t, err, "error retrieving APIExport discovery")
134134
require.True(t, resourceExists(resources, "apibindings"), "missing apibindings")
135135

136+
resources, err = discoveryVCClusterClient.ServerResourcesForGroupVersion(apisv1alpha1.SchemeGroupVersion.String())
137+
require.NoError(t, err, "error retrieving APIExport discovery")
138+
require.True(t, resourceExists(resources, "apibindings"), "missing apibindings")
139+
136140
user1VWCfg := framework.StaticTokenUserConfig("user-1", apiExportVWCfg)
137141
wwUser1VC, err := wildwestclientset.NewForConfig(user1VWCfg)
138142
require.NoError(t, err)

0 commit comments

Comments
 (0)