From d64c93874957936d3562cf97a3996dd664ca4d0e Mon Sep 17 00:00:00 2001 From: Karl Persson Date: Thu, 28 Nov 2024 16:31:05 +0100 Subject: [PATCH] K8s: Make it possible to register several kinds for a GroupVersion (#97161) * Make it possible to register several kinds for a GroupVersion --- apps/playlist/pkg/app/app.go | 6 ++-- .../apiserver/builder/runner/builder.go | 32 +++++++++++-------- .../apiserver/builder/runner/runner.go | 2 +- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/apps/playlist/pkg/app/app.go b/apps/playlist/pkg/app/app.go index 36d6b16e580..6627fc774b5 100644 --- a/apps/playlist/pkg/app/app.go +++ b/apps/playlist/pkg/app/app.go @@ -76,12 +76,12 @@ func New(cfg app.Config) (app.App, error) { return a, nil } -func GetKinds() map[schema.GroupVersion]resource.Kind { +func GetKinds() map[schema.GroupVersion][]resource.Kind { gv := schema.GroupVersion{ Group: playlistv0alpha1.PlaylistKind().Group(), Version: playlistv0alpha1.PlaylistKind().Version(), } - return map[schema.GroupVersion]resource.Kind{ - gv: playlistv0alpha1.PlaylistKind(), + return map[schema.GroupVersion][]resource.Kind{ + gv: {playlistv0alpha1.PlaylistKind()}, } } diff --git a/pkg/services/apiserver/builder/runner/builder.go b/pkg/services/apiserver/builder/runner/builder.go index 2857eae8666..2add23f9390 100644 --- a/pkg/services/apiserver/builder/runner/builder.go +++ b/pkg/services/apiserver/builder/runner/builder.go @@ -24,7 +24,7 @@ type AppBuilderConfig struct { Authorizer authorizer.Authorizer LegacyStorageGetter LegacyStorageGetter OpenAPIDefGetter common.GetOpenAPIDefinitions - ManagedKinds map[schema.GroupVersion]resource.Kind + ManagedKinds map[schema.GroupVersion][]resource.Kind CustomConfig any groupVersion schema.GroupVersion @@ -60,26 +60,30 @@ func (b *appBuilder) GetGroupVersion() schema.GroupVersion { // InstallSchema implements APIGroupBuilder.InstallSchema func (b *appBuilder) InstallSchema(scheme *runtime.Scheme) error { gv := b.GetGroupVersion() - for _, kind := range b.config.ManagedKinds { - scheme.AddKnownTypeWithName(gv.WithKind(kind.Kind()), kind.ZeroValue()) - scheme.AddKnownTypeWithName(gv.WithKind(kind.Kind()+"List"), kind.ZeroListValue()) + for _, kinds := range b.config.ManagedKinds { + for _, kind := range kinds { + scheme.AddKnownTypeWithName(gv.WithKind(kind.Kind()), kind.ZeroValue()) + scheme.AddKnownTypeWithName(gv.WithKind(kind.Kind()+"List"), kind.ZeroListValue()) + } } return scheme.SetVersionPriority(gv) } // UpdateAPIGroupInfo implements APIGroupBuilder.UpdateAPIGroupInfo func (b *appBuilder) UpdateAPIGroupInfo(apiGroupInfo *genericapiserver.APIGroupInfo, opts builder.APIGroupOptions) error { - for _, kind := range b.config.ManagedKinds { - version := kind.GroupVersionKind().Version - if _, ok := apiGroupInfo.VersionedResourcesStorageMap[version]; !ok { - apiGroupInfo.VersionedResourcesStorageMap[version] = make(map[string]rest.Storage) + for _, kinds := range b.config.ManagedKinds { + for _, kind := range kinds { + version := kind.GroupVersionKind().Version + if _, ok := apiGroupInfo.VersionedResourcesStorageMap[version]; !ok { + apiGroupInfo.VersionedResourcesStorageMap[version] = make(map[string]rest.Storage) + } + resourceInfo := KindToResourceInfo(kind) + store, err := b.getStorage(resourceInfo, opts) + if err != nil { + return err + } + apiGroupInfo.VersionedResourcesStorageMap[version][resourceInfo.StoragePath()] = store } - resourceInfo := KindToResourceInfo(kind) - store, err := b.getStorage(resourceInfo, opts) - if err != nil { - return err - } - apiGroupInfo.VersionedResourcesStorageMap[version][resourceInfo.StoragePath()] = store } return nil } diff --git a/pkg/services/apiserver/builder/runner/runner.go b/pkg/services/apiserver/builder/runner/runner.go index 4f52f834f49..617429998a0 100644 --- a/pkg/services/apiserver/builder/runner/runner.go +++ b/pkg/services/apiserver/builder/runner/runner.go @@ -101,7 +101,7 @@ func newAppBuilderGroup(cfg RunnerConfig, provider app.Provider) (appBuilderGrou for gv, kinds := range appBuilderConfig.ManagedKinds { confCopy := *appBuilderConfig - confCopy.ManagedKinds = map[schema.GroupVersion]resource.Kind{ + confCopy.ManagedKinds = map[schema.GroupVersion][]resource.Kind{ gv: kinds, } confCopy.groupVersion = gv