package userstorage import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" userstorage "github.com/grafana/grafana/pkg/apis/userstorage/v0alpha1" grafanaregistry "github.com/grafana/grafana/pkg/apiserver/registry/generic" grafanarest "github.com/grafana/grafana/pkg/apiserver/rest" "github.com/prometheus/client_golang/prometheus" ) var _ grafanarest.Storage = (*storage)(nil) type storage struct { *genericregistry.Store } func newStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter, registerer prometheus.Registerer) (*storage, error) { resourceInfo := userstorage.UserStorageResourceInfo strategy := grafanaregistry.NewStrategy(scheme, resourceInfo.GroupVersion()) storageStrategy := newStrategy(scheme, resourceInfo.GroupVersion(), registerer) store := &genericregistry.Store{ NewFunc: resourceInfo.NewFunc, NewListFunc: resourceInfo.NewListFunc, KeyRootFunc: grafanaregistry.KeyRootFunc(resourceInfo.GroupResource()), KeyFunc: grafanaregistry.NamespaceKeyFunc(resourceInfo.GroupResource()), PredicateFunc: grafanaregistry.Matcher, DefaultQualifiedResource: resourceInfo.GroupResource(), SingularQualifiedResource: resourceInfo.SingularGroupResource(), TableConvertor: resourceInfo.TableConverter(), CreateStrategy: storageStrategy, UpdateStrategy: storageStrategy, DeleteStrategy: strategy, } options := &generic.StoreOptions{RESTOptions: optsGetter, AttrFunc: grafanaregistry.GetAttrs} if err := store.CompleteWithOptions(options); err != nil { return nil, err } return &storage{Store: store}, nil }