K8s/Folders: Rename api group to singular (#81443)

This commit is contained in:
Ryan McKinley
2024-01-30 08:50:37 -08:00
committed by GitHub
parent d26959aafe
commit e041055012
18 changed files with 169 additions and 148 deletions
+1 -1
View File
@@ -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"`
}
@@ -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
@@ -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 @@
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
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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"
+23 -37
View File
@@ -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{}
+1 -1
View File
@@ -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"
)
+8 -7
View File
@@ -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)
+8 -7
View File
@@ -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,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!