K8s/Folders: Rename api group to singular (#81443)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// +k8s:deepcopy-gen=package
|
||||
// +k8s:openapi-gen=true
|
||||
// +k8s:defaulter-gen=TypeMeta
|
||||
// +groupName=datasources.grafana.com
|
||||
// +groupName=datasource.grafana.com
|
||||
|
||||
package v0alpha1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// +k8s:deepcopy-gen=package
|
||||
// +k8s:openapi-gen=true
|
||||
// +k8s:defaulter-gen=TypeMeta
|
||||
// +groupName=folders.grafana.app
|
||||
// +groupName=folder.grafana.app
|
||||
|
||||
package v0alpha1 // import "github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
package v0alpha1 // import "github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
GROUP = "folders.grafana.app"
|
||||
GROUP = "folder.grafana.app"
|
||||
VERSION = "v0alpha1"
|
||||
RESOURCE = "folders"
|
||||
APIVERSION = GROUP + "/" + VERSION
|
||||
@@ -9,7 +9,6 @@ type Folder struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
// TODO, structure so the name is not in spec
|
||||
Spec Spec `json:"spec,omitempty"`
|
||||
}
|
||||
|
||||
@@ -24,21 +23,32 @@ type Spec struct {
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type FolderList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
// +optional
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
|
||||
Items []Folder `json:"items,omitempty"`
|
||||
}
|
||||
|
||||
// FolderInfo returns a list of folder indentifiers (parents or children)
|
||||
// FolderInfoList returns a list of folder references (parents or children)
|
||||
// Unlike FolderList, each item is not a full k8s object
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type FolderInfo struct {
|
||||
type FolderInfoList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
|
||||
Items []FolderItem `json:"items"`
|
||||
// +listType=map
|
||||
// +listMapKey=uid
|
||||
Items []FolderInfo `json:"items,omitempty"`
|
||||
}
|
||||
|
||||
type FolderItem struct {
|
||||
Name string `json:"name"`
|
||||
// FolderInfo briefly describes a folder -- unlike a folder resource,
|
||||
// this is a partial record of the folder metadata used for navigating parents and children
|
||||
type FolderInfo struct {
|
||||
// UID is the unique identifier for a folder (and the k8s name)
|
||||
UID string `json:"uid"`
|
||||
|
||||
// Title is the display value
|
||||
Title string `json:"title"`
|
||||
|
||||
// The parent folder UID
|
||||
Parent string `json:"parent,omitempty"`
|
||||
}
|
||||
+24
-23
@@ -41,12 +41,6 @@ func (in *Folder) DeepCopyObject() runtime.Object {
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *FolderInfo) DeepCopyInto(out *FolderInfo) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]FolderItem, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@@ -60,30 +54,37 @@ func (in *FolderInfo) DeepCopy() *FolderInfo {
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *FolderInfoList) DeepCopyInto(out *FolderInfoList) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]FolderInfo, len(*in))
|
||||
copy(*out, *in)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FolderInfoList.
|
||||
func (in *FolderInfoList) DeepCopy() *FolderInfoList {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(FolderInfoList)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *FolderInfo) DeepCopyObject() runtime.Object {
|
||||
func (in *FolderInfoList) 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 *FolderItem) DeepCopyInto(out *FolderItem) {
|
||||
*out = *in
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FolderItem.
|
||||
func (in *FolderItem) DeepCopy() *FolderItem {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(FolderItem)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *FolderList) DeepCopyInto(out *FolderList) {
|
||||
*out = *in
|
||||
+67
-44
@@ -16,15 +16,15 @@ import (
|
||||
|
||||
func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
|
||||
return map[string]common.OpenAPIDefinition{
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Folder": schema_pkg_apis_folders_v0alpha1_Folder(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.FolderInfo": schema_pkg_apis_folders_v0alpha1_FolderInfo(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.FolderItem": schema_pkg_apis_folders_v0alpha1_FolderItem(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.FolderList": schema_pkg_apis_folders_v0alpha1_FolderList(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Spec": schema_pkg_apis_folders_v0alpha1_Spec(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Folder": schema_pkg_apis_folder_v0alpha1_Folder(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.FolderInfo": schema_pkg_apis_folder_v0alpha1_FolderInfo(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.FolderInfoList": schema_pkg_apis_folder_v0alpha1_FolderInfoList(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.FolderList": schema_pkg_apis_folder_v0alpha1_FolderList(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Spec": schema_pkg_apis_folder_v0alpha1_Spec(ref),
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folders_v0alpha1_Folder(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
func schema_pkg_apis_folder_v0alpha1_Folder(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
@@ -53,22 +53,59 @@ func schema_pkg_apis_folders_v0alpha1_Folder(ref common.ReferenceCallback) commo
|
||||
"spec": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Spec"),
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Spec"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Spec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Spec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folders_v0alpha1_FolderInfo(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
func schema_pkg_apis_folder_v0alpha1_FolderInfo(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "FolderInfo returns a list of folder indentifiers (parents or children)",
|
||||
Description: "FolderInfo briefly describes a folder -- unlike a folder resource, this is a partial record of the folder metadata used for navigating parents and children",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"uid": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "UID is the unique identifier for a folder (and the k8s name)",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"title": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Title is the display value",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"parent": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "The parent folder UID",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"uid", "title"},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folder_v0alpha1_FolderInfoList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "FolderInfoList returns a list of folder references (parents or children) Unlike FolderList, each item is not a full k8s object",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"kind": {
|
||||
@@ -85,56 +122,42 @@ func schema_pkg_apis_folders_v0alpha1_FolderInfo(ref common.ReferenceCallback) c
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"metadata": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
|
||||
},
|
||||
},
|
||||
"items": {
|
||||
VendorExtensible: spec.VendorExtensible{
|
||||
Extensions: spec.Extensions{
|
||||
"x-kubernetes-list-map-keys": []interface{}{
|
||||
"uid",
|
||||
},
|
||||
"x-kubernetes-list-type": "map",
|
||||
},
|
||||
},
|
||||
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/folders/v0alpha1.FolderItem"),
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/folder/v0alpha1.FolderInfo"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"items"},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.FolderItem"},
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.FolderInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folders_v0alpha1_FolderItem(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"name": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"title": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"name", "title"},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folders_v0alpha1_FolderList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
func schema_pkg_apis_folder_v0alpha1_FolderList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
@@ -167,7 +190,7 @@ func schema_pkg_apis_folders_v0alpha1_FolderList(ref common.ReferenceCallback) c
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Folder"),
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Folder"),
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -177,11 +200,11 @@ func schema_pkg_apis_folders_v0alpha1_FolderList(ref common.ReferenceCallback) c
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1.Folder", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"},
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1.Folder", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_folders_v0alpha1_Spec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
func schema_pkg_apis_folder_v0alpha1_Spec(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
+1
-1
@@ -1 +1 @@
|
||||
API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/folders/v0alpha1,FolderInfo,Items
|
||||
API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/folder/v0alpha1,FolderInfoList,Items
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/endpoints/request"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
|
||||
|
||||
@@ -11,7 +11,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/infra/appcontext"
|
||||
"github.com/grafana/grafana/pkg/services/dashboards"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
|
||||
@@ -9,17 +9,15 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||
common "k8s.io/kube-openapi/pkg/common"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
grafanaapiserver "github.com/grafana/grafana/pkg/services/grafana-apiserver"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/endpoints/request"
|
||||
grafanaregistry "github.com/grafana/grafana/pkg/services/grafana-apiserver/registry/generic"
|
||||
grafanarest "github.com/grafana/grafana/pkg/services/grafana-apiserver/rest"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
|
||||
"github.com/grafana/grafana/pkg/setting"
|
||||
@@ -64,7 +62,7 @@ func addKnownTypes(scheme *runtime.Scheme, gv schema.GroupVersion) {
|
||||
scheme.AddKnownTypes(gv,
|
||||
&v0alpha1.Folder{},
|
||||
&v0alpha1.FolderList{},
|
||||
&v0alpha1.FolderInfo{},
|
||||
&v0alpha1.FolderInfoList{},
|
||||
)
|
||||
}
|
||||
|
||||
@@ -94,40 +92,28 @@ func (b *FolderAPIBuilder) GetAPIGroupInfo(
|
||||
) (*genericapiserver.APIGroupInfo, error) {
|
||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(v0alpha1.GROUP, scheme, metav1.ParameterCodec, codecs)
|
||||
|
||||
strategy := grafanaregistry.NewStrategy(scheme)
|
||||
store := &genericregistry.Store{
|
||||
NewFunc: resourceInfo.NewFunc,
|
||||
NewListFunc: resourceInfo.NewListFunc,
|
||||
PredicateFunc: grafanaregistry.Matcher,
|
||||
DefaultQualifiedResource: resourceInfo.GroupResource(),
|
||||
SingularQualifiedResource: resourceInfo.SingularGroupResource(),
|
||||
CreateStrategy: strategy,
|
||||
UpdateStrategy: strategy,
|
||||
DeleteStrategy: strategy,
|
||||
}
|
||||
store.TableConvertor = utils.NewTableConverter(
|
||||
store.DefaultQualifiedResource,
|
||||
[]metav1.TableColumnDefinition{
|
||||
{Name: "Name", Type: "string", Format: "name"},
|
||||
{Name: "Title", Type: "string", Format: "string", Description: "The display name"},
|
||||
{Name: "Parent", Type: "string", Format: "string", Description: "Parent folder UID"},
|
||||
},
|
||||
func(obj any) ([]interface{}, error) {
|
||||
r, ok := obj.(*v0alpha1.Folder)
|
||||
if ok {
|
||||
accessor, _ := utils.MetaAccessor(r)
|
||||
return []interface{}{
|
||||
r.Name,
|
||||
r.Spec.Title,
|
||||
accessor.GetFolder(),
|
||||
}, nil
|
||||
}
|
||||
return nil, fmt.Errorf("expected resource or info")
|
||||
})
|
||||
legacyStore := &legacyStorage{
|
||||
service: b.folderSvc,
|
||||
namespacer: b.namespacer,
|
||||
tableConverter: store.TableConvertor,
|
||||
service: b.folderSvc,
|
||||
namespacer: b.namespacer,
|
||||
tableConverter: utils.NewTableConverter(
|
||||
resourceInfo.GroupResource(),
|
||||
[]metav1.TableColumnDefinition{
|
||||
{Name: "Name", Type: "string", Format: "name"},
|
||||
{Name: "Title", Type: "string", Format: "string", Description: "The display name"},
|
||||
{Name: "Parent", Type: "string", Format: "string", Description: "Parent folder UID"},
|
||||
},
|
||||
func(obj any) ([]interface{}, error) {
|
||||
r, ok := obj.(*v0alpha1.Folder)
|
||||
if ok {
|
||||
accessor, _ := utils.MetaAccessor(r)
|
||||
return []interface{}{
|
||||
r.Name,
|
||||
r.Spec.Title,
|
||||
accessor.GetFolder(),
|
||||
}, nil
|
||||
}
|
||||
return nil, fmt.Errorf("expected resource or info")
|
||||
}),
|
||||
}
|
||||
|
||||
storage := map[string]rest.Storage{}
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"k8s.io/apiserver/pkg/registry/generic"
|
||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
grafanaregistry "github.com/grafana/grafana/pkg/services/grafana-apiserver/registry/generic"
|
||||
grafanarest "github.com/grafana/grafana/pkg/services/grafana-apiserver/rest"
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/infra/appcontext"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/endpoints/request"
|
||||
@@ -20,7 +20,7 @@ type subChildrenREST struct {
|
||||
var _ = rest.Connecter(&subChildrenREST{})
|
||||
|
||||
func (r *subChildrenREST) New() runtime.Object {
|
||||
return &v0alpha1.FolderInfo{}
|
||||
return &v0alpha1.FolderInfoList{}
|
||||
}
|
||||
|
||||
func (r *subChildrenREST) Destroy() {
|
||||
@@ -58,13 +58,14 @@ func (r *subChildrenREST) Connect(ctx context.Context, name string, opts runtime
|
||||
return
|
||||
}
|
||||
|
||||
info := &v0alpha1.FolderInfo{
|
||||
Items: make([]v0alpha1.FolderItem, 0),
|
||||
info := &v0alpha1.FolderInfoList{
|
||||
Items: make([]v0alpha1.FolderInfo, 0),
|
||||
}
|
||||
for _, parent := range children {
|
||||
info.Items = append(info.Items, v0alpha1.FolderItem{
|
||||
Name: parent.UID,
|
||||
Title: parent.Title,
|
||||
info.Items = append(info.Items, v0alpha1.FolderInfo{
|
||||
UID: parent.UID,
|
||||
Title: parent.Title,
|
||||
Parent: parent.ParentUID,
|
||||
})
|
||||
}
|
||||
responder.Object(http.StatusOK, info)
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apiserver/pkg/registry/rest"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/services/folder"
|
||||
"github.com/grafana/grafana/pkg/services/grafana-apiserver/endpoints/request"
|
||||
)
|
||||
@@ -19,7 +19,7 @@ type subParentsREST struct {
|
||||
var _ = rest.Connecter(&subParentsREST{})
|
||||
|
||||
func (r *subParentsREST) New() runtime.Object {
|
||||
return &v0alpha1.FolderInfo{}
|
||||
return &v0alpha1.FolderInfoList{}
|
||||
}
|
||||
|
||||
func (r *subParentsREST) Destroy() {
|
||||
@@ -50,13 +50,14 @@ func (r *subParentsREST) Connect(ctx context.Context, name string, opts runtime.
|
||||
return
|
||||
}
|
||||
|
||||
info := &v0alpha1.FolderInfo{
|
||||
Items: make([]v0alpha1.FolderItem, 0),
|
||||
info := &v0alpha1.FolderInfoList{
|
||||
Items: make([]v0alpha1.FolderInfo, 0),
|
||||
}
|
||||
for _, parent := range parents {
|
||||
info.Items = append(info.Items, v0alpha1.FolderItem{
|
||||
Name: parent.UID,
|
||||
Title: parent.Title,
|
||||
info.Items = append(info.Items, v0alpha1.FolderInfo{
|
||||
UID: parent.UID,
|
||||
Title: parent.Title,
|
||||
Parent: parent.ParentUID,
|
||||
})
|
||||
}
|
||||
responder.Object(http.StatusOK, info)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
|
||||
foldersV0 "github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
folder "github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore/session"
|
||||
)
|
||||
|
||||
@@ -44,7 +44,7 @@ func (s *sqlEntityServer) updateFolderTree(ctx context.Context, tx *session.Sess
|
||||
" FROM entity" +
|
||||
" WHERE " + s.dialect.Quote("group") + "=? AND resource=? AND namespace=?" +
|
||||
" ORDER BY slug asc"
|
||||
args := []interface{}{foldersV0.GROUP, foldersV0.RESOURCE, namespace}
|
||||
args := []interface{}{folder.GROUP, folder.RESOURCE, namespace}
|
||||
|
||||
all := []*folderInfo{}
|
||||
rows, err := tx.Query(ctx, query, args...)
|
||||
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
"github.com/bwmarrin/snowflake"
|
||||
"github.com/google/uuid"
|
||||
|
||||
foldersV0 "github.com/grafana/grafana/pkg/apis/folders/v0alpha1"
|
||||
folder "github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/infra/appcontext"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
@@ -446,9 +446,9 @@ func (s *sqlEntityServer) Create(ctx context.Context, r *entity.CreateEntityRequ
|
||||
}
|
||||
|
||||
switch current.Group {
|
||||
case foldersV0.GROUP:
|
||||
case folder.GROUP:
|
||||
switch current.Resource {
|
||||
case foldersV0.RESOURCE:
|
||||
case folder.RESOURCE:
|
||||
err = s.updateFolderTree(ctx, tx, current.Namespace)
|
||||
if err != nil {
|
||||
s.log.Error("error updating folder tree", "msg", err.Error())
|
||||
@@ -671,9 +671,9 @@ func (s *sqlEntityServer) Update(ctx context.Context, r *entity.UpdateEntityRequ
|
||||
}
|
||||
|
||||
switch current.Group {
|
||||
case foldersV0.GROUP:
|
||||
case folder.GROUP:
|
||||
switch current.Resource {
|
||||
case foldersV0.RESOURCE:
|
||||
case folder.RESOURCE:
|
||||
err = s.updateFolderTree(ctx, tx, current.Namespace)
|
||||
if err != nil {
|
||||
s.log.Error("error updating folder tree", "msg", err.Error())
|
||||
@@ -789,9 +789,9 @@ func (s *sqlEntityServer) doDelete(ctx context.Context, tx *session.SessionTx, e
|
||||
}
|
||||
|
||||
switch ent.Group {
|
||||
case foldersV0.GROUP:
|
||||
case folder.GROUP:
|
||||
switch ent.Resource {
|
||||
case foldersV0.RESOURCE:
|
||||
case folder.RESOURCE:
|
||||
err = s.updateFolderTree(ctx, tx, ent.Namespace)
|
||||
if err != nil {
|
||||
s.log.Error("error updating folder tree", "msg", err.Error())
|
||||
|
||||
@@ -17,7 +17,6 @@ func TestFoldersApp(t *testing.T) {
|
||||
}
|
||||
helper := apis.NewK8sTestHelper(t, testinfra.GrafanaOpts{
|
||||
AppModeProduction: false, // required for experimental APIs
|
||||
DisableAnonymous: true,
|
||||
EnableFeatureToggles: []string{
|
||||
featuremgmt.FlagGrafanaAPIServerWithExperimentalAPIs, // Required to start the example service
|
||||
},
|
||||
@@ -25,7 +24,7 @@ func TestFoldersApp(t *testing.T) {
|
||||
|
||||
t.Run("Check discovery client", func(t *testing.T) {
|
||||
disco := helper.NewDiscoveryClient()
|
||||
resources, err := disco.ServerResourcesForGroupVersion("folders.grafana.app/v0alpha1")
|
||||
resources, err := disco.ServerResourcesForGroupVersion("folder.grafana.app/v0alpha1")
|
||||
require.NoError(t, err)
|
||||
|
||||
v1Disco, err := json.MarshalIndent(resources, "", " ")
|
||||
@@ -35,7 +34,7 @@ func TestFoldersApp(t *testing.T) {
|
||||
require.JSONEq(t, `{
|
||||
"kind": "APIResourceList",
|
||||
"apiVersion": "v1",
|
||||
"groupVersion": "folders.grafana.app/v0alpha1",
|
||||
"groupVersion": "folder.grafana.app/v0alpha1",
|
||||
"resources": [
|
||||
{
|
||||
"name": "folders",
|
||||
@@ -55,7 +54,7 @@ func TestFoldersApp(t *testing.T) {
|
||||
"name": "folders/children",
|
||||
"singularName": "",
|
||||
"namespaced": true,
|
||||
"kind": "FolderInfo",
|
||||
"kind": "FolderInfoList",
|
||||
"verbs": [
|
||||
"get"
|
||||
]
|
||||
@@ -64,7 +63,7 @@ func TestFoldersApp(t *testing.T) {
|
||||
"name": "folders/parents",
|
||||
"singularName": "",
|
||||
"namespaced": true,
|
||||
"kind": "FolderInfo",
|
||||
"kind": "FolderInfoList",
|
||||
"verbs": [
|
||||
"get"
|
||||
]
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
apiVersion: folders.grafana.app/v0alpha1
|
||||
apiVersion: folder.grafana.app/v0alpha1
|
||||
kind: Folder
|
||||
metadata:
|
||||
generateName: x # anything is ok here... except yes or true -- they become boolean!
|
||||
Reference in New Issue
Block a user