feat: use standard registry storage

This commit is contained in:
Mariell Hoversholm committed 2024-11-14 08:36:05 +01:00
1 parent 4d9e5a8ceb
commit 59dc40ea0b
2 files changed
+2 -70

No files matched your search

+2 -4
View File
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/grafana/grafana/pkg/apis/provisioning/v0alpha1"
grafanaregistry "github.com/grafana/grafana/pkg/apiserver/registry/generic"
"github.com/grafana/grafana/pkg/services/apiserver/builder"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/prometheus/client_golang/prometheus"
@@ -63,10 +64,7 @@ func (b *ProvisioningAPIBuilder) InstallSchema(scheme *runtime.Scheme) error {
}
func (b *ProvisioningAPIBuilder) UpdateAPIGroupInfo(apiGroupInfo *genericapiserver.APIGroupInfo, opts builder.APIGroupOptions) error {
scheme := opts.Scheme
optsGetter := opts.OptsGetter
repositoryStorage, err := newRepositoryStorage(scheme, optsGetter)
repositoryStorage, err := grafanaregistry.NewRegistryStore(opts.Scheme, v0alpha1.RepositoryResourceInfo, opts.OptsGetter)
if err != nil {
return fmt.Errorf("failed to create repository storage: %w", err)
}
-66
View File
@@ -1,66 +0,0 @@
package provisioning
import (
"errors"
"github.com/grafana/grafana/pkg/apis/provisioning/v0alpha1"
grafanaregistry "github.com/grafana/grafana/pkg/apiserver/registry/generic"
grafanarest "github.com/grafana/grafana/pkg/apiserver/rest"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apiserver/pkg/registry/generic"
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
apistore "k8s.io/apiserver/pkg/storage"
)
type storage struct {
*genericregistry.Store
}
var _ grafanarest.Storage = (*storage)(nil)
func newRepositoryStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*storage, error) {
info := v0alpha1.RepositoryResourceInfo
strategy := grafanaregistry.NewStrategy(scheme, info.GroupVersion())
store := &genericregistry.Store{
NewFunc: info.NewFunc,
NewListFunc: info.NewListFunc,
KeyRootFunc: grafanaregistry.KeyRootFunc(info.GroupResource()),
KeyFunc: grafanaregistry.NamespaceKeyFunc(info.GroupResource()),
PredicateFunc: Matcher,
DefaultQualifiedResource: info.GroupResource(),
SingularQualifiedResource: info.SingularGroupResource(),
TableConvertor: info.TableConverter(),
CreateStrategy: strategy,
UpdateStrategy: strategy,
DeleteStrategy: strategy,
}
options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: GetAttrs}
if err := store.CompleteWithOptions(options); err != nil {
return nil, err
}
return &storage{Store: store}, nil
}
func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) {
if repo, ok := obj.(*v0alpha1.Repository); ok {
return labels.Set(repo.Labels), SelectableRepositoryFields(repo), nil
}
return nil, nil, errors.New("not a Repository object")
}
// Matcher returns a generic.SelectionPredicate that matches on label and field selectors.
func Matcher(label labels.Selector, field fields.Selector) apistore.SelectionPredicate {
return apistore.SelectionPredicate{
Label: label,
Field: field,
GetAttrs: GetAttrs,
}
}
func SelectableRepositoryFields(obj *v0alpha1.Repository) fields.Set {
return generic.MergeFieldsSets(generic.ObjectMetaFieldsSet(&obj.ObjectMeta, false), fields.Set{
// TODO: Add the subfields here.
})
}