mirror of https://github.com/grafana/grafana.git
				
				
				
			Scopes: Update BE API to include object for linking scope to dashboards (#84608)
* Add ScopeDashboard --------- Co-authored-by: Todd Treece <todd.treece@grafana.com>
This commit is contained in:
		
							parent
							
								
									155e38edfe
								
							
						
					
					
						commit
						aac2cf0aa5
					
				| 
						 | 
					@ -20,6 +20,12 @@ var ScopeResourceInfo = common.NewResourceInfo(GROUP, VERSION,
 | 
				
			||||||
	func() runtime.Object { return &ScopeList{} },
 | 
						func() runtime.Object { return &ScopeList{} },
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var ScopeDashboardResourceInfo = common.NewResourceInfo(GROUP, VERSION,
 | 
				
			||||||
 | 
						"scopedashboards", "scopedashboard", "ScopeDashboard",
 | 
				
			||||||
 | 
						func() runtime.Object { return &ScopeDashboard{} },
 | 
				
			||||||
 | 
						func() runtime.Object { return &ScopeDashboardList{} },
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	// SchemeGroupVersion is group version used to register these objects
 | 
						// SchemeGroupVersion is group version used to register these objects
 | 
				
			||||||
	SchemeGroupVersion = schema.GroupVersion{Group: GROUP, Version: VERSION}
 | 
						SchemeGroupVersion = schema.GroupVersion{Group: GROUP, Version: VERSION}
 | 
				
			||||||
| 
						 | 
					@ -39,6 +45,8 @@ func addKnownTypes(scheme *runtime.Scheme) error {
 | 
				
			||||||
	scheme.AddKnownTypes(SchemeGroupVersion,
 | 
						scheme.AddKnownTypes(SchemeGroupVersion,
 | 
				
			||||||
		&Scope{},
 | 
							&Scope{},
 | 
				
			||||||
		&ScopeList{},
 | 
							&ScopeList{},
 | 
				
			||||||
 | 
							&ScopeDashboard{},
 | 
				
			||||||
 | 
							&ScopeDashboardList{},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
 | 
						metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,11 +26,6 @@ type ScopeFilter struct {
 | 
				
			||||||
	Operator string `json:"operator"`
 | 
						Operator string `json:"operator"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ScopeDashboard struct {
 | 
					 | 
				
			||||||
	DashboardUID string `json:"dashboardUid"`
 | 
					 | 
				
			||||||
	ScopeUID     string `json:"scopeUid"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
					// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
				
			||||||
type ScopeList struct {
 | 
					type ScopeList struct {
 | 
				
			||||||
	metav1.TypeMeta `json:",inline"`
 | 
						metav1.TypeMeta `json:",inline"`
 | 
				
			||||||
| 
						 | 
					@ -38,3 +33,20 @@ type ScopeList struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Items []Scope `json:"items,omitempty"`
 | 
						Items []Scope `json:"items,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
				
			||||||
 | 
					type ScopeDashboard struct {
 | 
				
			||||||
 | 
						metav1.TypeMeta   `json:",inline"`
 | 
				
			||||||
 | 
						metav1.ObjectMeta `json:"metadata,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DashboardUID []string `json:"dashboardUid"`
 | 
				
			||||||
 | 
						ScopeUID     string   `json:"scopeUid"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 | 
				
			||||||
 | 
					type ScopeDashboardList struct {
 | 
				
			||||||
 | 
						metav1.TypeMeta `json:",inline"`
 | 
				
			||||||
 | 
						metav1.ListMeta `json:"metadata,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Items []ScopeDashboard `json:"items,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,6 +41,13 @@ func (in *Scope) DeepCopyObject() runtime.Object {
 | 
				
			||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | 
					// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | 
				
			||||||
func (in *ScopeDashboard) DeepCopyInto(out *ScopeDashboard) {
 | 
					func (in *ScopeDashboard) DeepCopyInto(out *ScopeDashboard) {
 | 
				
			||||||
	*out = *in
 | 
						*out = *in
 | 
				
			||||||
 | 
						out.TypeMeta = in.TypeMeta
 | 
				
			||||||
 | 
						in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
 | 
				
			||||||
 | 
						if in.DashboardUID != nil {
 | 
				
			||||||
 | 
							in, out := &in.DashboardUID, &out.DashboardUID
 | 
				
			||||||
 | 
							*out = make([]string, len(*in))
 | 
				
			||||||
 | 
							copy(*out, *in)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +61,47 @@ func (in *ScopeDashboard) DeepCopy() *ScopeDashboard {
 | 
				
			||||||
	return out
 | 
						return out
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 | 
				
			||||||
 | 
					func (in *ScopeDashboard) DeepCopyObject() runtime.Object {
 | 
				
			||||||
 | 
						if c := in.DeepCopy(); c != nil {
 | 
				
			||||||
 | 
							return c
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | 
				
			||||||
 | 
					func (in *ScopeDashboardList) DeepCopyInto(out *ScopeDashboardList) {
 | 
				
			||||||
 | 
						*out = *in
 | 
				
			||||||
 | 
						out.TypeMeta = in.TypeMeta
 | 
				
			||||||
 | 
						in.ListMeta.DeepCopyInto(&out.ListMeta)
 | 
				
			||||||
 | 
						if in.Items != nil {
 | 
				
			||||||
 | 
							in, out := &in.Items, &out.Items
 | 
				
			||||||
 | 
							*out = make([]ScopeDashboard, len(*in))
 | 
				
			||||||
 | 
							for i := range *in {
 | 
				
			||||||
 | 
								(*in)[i].DeepCopyInto(&(*out)[i])
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScopeDashboardList.
 | 
				
			||||||
 | 
					func (in *ScopeDashboardList) DeepCopy() *ScopeDashboardList {
 | 
				
			||||||
 | 
						if in == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						out := new(ScopeDashboardList)
 | 
				
			||||||
 | 
						in.DeepCopyInto(out)
 | 
				
			||||||
 | 
						return out
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 | 
				
			||||||
 | 
					func (in *ScopeDashboardList) DeepCopyObject() runtime.Object {
 | 
				
			||||||
 | 
						if c := in.DeepCopy(); c != nil {
 | 
				
			||||||
 | 
							return c
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | 
					// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 | 
				
			||||||
func (in *ScopeFilter) DeepCopyInto(out *ScopeFilter) {
 | 
					func (in *ScopeFilter) DeepCopyInto(out *ScopeFilter) {
 | 
				
			||||||
	*out = *in
 | 
						*out = *in
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,12 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
 | 
					func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
 | 
				
			||||||
	return map[string]common.OpenAPIDefinition{
 | 
						return map[string]common.OpenAPIDefinition{
 | 
				
			||||||
		"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.Scope":          schema_pkg_apis_scope_v0alpha1_Scope(ref),
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.Scope":              schema_pkg_apis_scope_v0alpha1_Scope(ref),
 | 
				
			||||||
		"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeDashboard": schema_pkg_apis_scope_v0alpha1_ScopeDashboard(ref),
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeDashboard":     schema_pkg_apis_scope_v0alpha1_ScopeDashboard(ref),
 | 
				
			||||||
		"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeFilter":    schema_pkg_apis_scope_v0alpha1_ScopeFilter(ref),
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeDashboardList": schema_pkg_apis_scope_v0alpha1_ScopeDashboardList(ref),
 | 
				
			||||||
		"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeList":      schema_pkg_apis_scope_v0alpha1_ScopeList(ref),
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeFilter":        schema_pkg_apis_scope_v0alpha1_ScopeFilter(ref),
 | 
				
			||||||
		"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeSpec":      schema_pkg_apis_scope_v0alpha1_ScopeSpec(ref),
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeList":          schema_pkg_apis_scope_v0alpha1_ScopeList(ref),
 | 
				
			||||||
 | 
							"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeSpec":          schema_pkg_apis_scope_v0alpha1_ScopeSpec(ref),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,11 +71,38 @@ func schema_pkg_apis_scope_v0alpha1_ScopeDashboard(ref common.ReferenceCallback)
 | 
				
			||||||
			SchemaProps: spec.SchemaProps{
 | 
								SchemaProps: spec.SchemaProps{
 | 
				
			||||||
				Type: []string{"object"},
 | 
									Type: []string{"object"},
 | 
				
			||||||
				Properties: map[string]spec.Schema{
 | 
									Properties: map[string]spec.Schema{
 | 
				
			||||||
 | 
										"kind": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
 | 
				
			||||||
 | 
												Type:        []string{"string"},
 | 
				
			||||||
 | 
												Format:      "",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"apiVersion": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
 | 
				
			||||||
 | 
												Type:        []string{"string"},
 | 
				
			||||||
 | 
												Format:      "",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"metadata": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Default: map[string]interface{}{},
 | 
				
			||||||
 | 
												Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
					"dashboardUid": {
 | 
										"dashboardUid": {
 | 
				
			||||||
						SchemaProps: spec.SchemaProps{
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
							Default: "",
 | 
												Type: []string{"array"},
 | 
				
			||||||
							Type:    []string{"string"},
 | 
												Items: &spec.SchemaOrArray{
 | 
				
			||||||
							Format:  "",
 | 
													Schema: &spec.Schema{
 | 
				
			||||||
 | 
														SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
															Default: "",
 | 
				
			||||||
 | 
															Type:    []string{"string"},
 | 
				
			||||||
 | 
															Format:  "",
 | 
				
			||||||
 | 
														},
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
					"scopeUid": {
 | 
										"scopeUid": {
 | 
				
			||||||
| 
						 | 
					@ -88,6 +116,55 @@ func schema_pkg_apis_scope_v0alpha1_ScopeDashboard(ref common.ReferenceCallback)
 | 
				
			||||||
				Required: []string{"dashboardUid", "scopeUid"},
 | 
									Required: []string{"dashboardUid", "scopeUid"},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							Dependencies: []string{
 | 
				
			||||||
 | 
								"k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func schema_pkg_apis_scope_v0alpha1_ScopeDashboardList(ref common.ReferenceCallback) common.OpenAPIDefinition {
 | 
				
			||||||
 | 
						return common.OpenAPIDefinition{
 | 
				
			||||||
 | 
							Schema: spec.Schema{
 | 
				
			||||||
 | 
								SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
									Type: []string{"object"},
 | 
				
			||||||
 | 
									Properties: map[string]spec.Schema{
 | 
				
			||||||
 | 
										"kind": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
 | 
				
			||||||
 | 
												Type:        []string{"string"},
 | 
				
			||||||
 | 
												Format:      "",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"apiVersion": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
 | 
				
			||||||
 | 
												Type:        []string{"string"},
 | 
				
			||||||
 | 
												Format:      "",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"metadata": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Default: map[string]interface{}{},
 | 
				
			||||||
 | 
												Ref:     ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"items": {
 | 
				
			||||||
 | 
											SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
												Type: []string{"array"},
 | 
				
			||||||
 | 
												Items: &spec.SchemaOrArray{
 | 
				
			||||||
 | 
													Schema: &spec.Schema{
 | 
				
			||||||
 | 
														SchemaProps: spec.SchemaProps{
 | 
				
			||||||
 | 
															Default: map[string]interface{}{},
 | 
				
			||||||
 | 
															Ref:     ref("github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeDashboard"),
 | 
				
			||||||
 | 
														},
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							Dependencies: []string{
 | 
				
			||||||
 | 
								"github.com/grafana/grafana/pkg/apis/scope/v0alpha1.ScopeDashboard", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeDashboard,DashboardUID
 | 
				
			||||||
API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeSpec,Filters
 | 
					API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeSpec,Filters
 | 
				
			||||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeDashboard,DashboardUID
 | 
					API rule violation: names_match,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeDashboard,DashboardUID
 | 
				
			||||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeDashboard,ScopeUID
 | 
					API rule violation: names_match,github.com/grafana/grafana/pkg/apis/scope/v0alpha1,ScopeDashboard,ScopeUID
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,13 +68,23 @@ func (b *ScopeAPIBuilder) GetAPIGroupInfo(
 | 
				
			||||||
) (*genericapiserver.APIGroupInfo, error) {
 | 
					) (*genericapiserver.APIGroupInfo, error) {
 | 
				
			||||||
	apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(scope.GROUP, scheme, metav1.ParameterCodec, codecs)
 | 
						apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(scope.GROUP, scheme, metav1.ParameterCodec, codecs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resourceInfo := scope.ScopeResourceInfo
 | 
						scopeResourceInfo := scope.ScopeResourceInfo
 | 
				
			||||||
 | 
						scopeDashboardResourceInfo := scope.ScopeDashboardResourceInfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	scopeStorage, err := newStorage(scheme, optsGetter)
 | 
					
 | 
				
			||||||
 | 
						scopeStorage, err := newScopeStorage(scheme, optsGetter)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage[resourceInfo.StoragePath()] = scopeStorage
 | 
						storage[scopeResourceInfo.StoragePath()] = scopeStorage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						scopeDashboardStorage, err := newScopeDashboardStorage(scheme, optsGetter)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						storage[scopeDashboardResourceInfo.StoragePath()] = scopeDashboardStorage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiGroupInfo.VersionedResourcesStorageMap[scope.VERSION] = storage
 | 
						apiGroupInfo.VersionedResourcesStorageMap[scope.VERSION] = storage
 | 
				
			||||||
	return &apiGroupInfo, nil
 | 
						return &apiGroupInfo, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ type storage struct {
 | 
				
			||||||
	*genericregistry.Store
 | 
						*genericregistry.Store
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*storage, error) {
 | 
					func newScopeStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*storage, error) {
 | 
				
			||||||
	strategy := grafanaregistry.NewStrategy(scheme)
 | 
						strategy := grafanaregistry.NewStrategy(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resourceInfo := scope.ScopeResourceInfo
 | 
						resourceInfo := scope.ScopeResourceInfo
 | 
				
			||||||
| 
						 | 
					@ -40,7 +40,45 @@ func newStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*
 | 
				
			||||||
			func(obj any) ([]interface{}, error) {
 | 
								func(obj any) ([]interface{}, error) {
 | 
				
			||||||
				m, ok := obj.(*scope.Scope)
 | 
									m, ok := obj.(*scope.Scope)
 | 
				
			||||||
				if !ok {
 | 
									if !ok {
 | 
				
			||||||
					return nil, fmt.Errorf("expected query template")
 | 
										return nil, fmt.Errorf("expected scope")
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return []interface{}{
 | 
				
			||||||
 | 
										m.Name,
 | 
				
			||||||
 | 
										m.CreationTimestamp.UTC().Format(time.RFC3339),
 | 
				
			||||||
 | 
									}, nil
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							),
 | 
				
			||||||
 | 
							CreateStrategy: strategy,
 | 
				
			||||||
 | 
							UpdateStrategy: strategy,
 | 
				
			||||||
 | 
							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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func newScopeDashboardStorage(scheme *runtime.Scheme, optsGetter generic.RESTOptionsGetter) (*storage, error) {
 | 
				
			||||||
 | 
						strategy := grafanaregistry.NewStrategy(scheme)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						resourceInfo := scope.ScopeDashboardResourceInfo
 | 
				
			||||||
 | 
						store := &genericregistry.Store{
 | 
				
			||||||
 | 
							NewFunc:                   resourceInfo.NewFunc,
 | 
				
			||||||
 | 
							NewListFunc:               resourceInfo.NewListFunc,
 | 
				
			||||||
 | 
							PredicateFunc:             grafanaregistry.Matcher,
 | 
				
			||||||
 | 
							DefaultQualifiedResource:  resourceInfo.GroupResource(),
 | 
				
			||||||
 | 
							SingularQualifiedResource: resourceInfo.SingularGroupResource(),
 | 
				
			||||||
 | 
							TableConvertor: utils.NewTableConverter(
 | 
				
			||||||
 | 
								resourceInfo.GroupResource(),
 | 
				
			||||||
 | 
								[]metav1.TableColumnDefinition{
 | 
				
			||||||
 | 
									{Name: "Name", Type: "string", Format: "name"},
 | 
				
			||||||
 | 
									{Name: "Created At", Type: "date"},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								func(obj any) ([]interface{}, error) {
 | 
				
			||||||
 | 
									m, ok := obj.(*scope.Scope)
 | 
				
			||||||
 | 
									if !ok {
 | 
				
			||||||
 | 
										return nil, fmt.Errorf("expected scope")
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return []interface{}{
 | 
									return []interface{}{
 | 
				
			||||||
					m.Name,
 | 
										m.Name,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue