Folders: Convert between unstructured and legacy (#99504)

This commit is contained in:
Ryan McKinley
2025-01-27 17:37:28 +01:00
committed by GitHub
parent b4c13defa6
commit a5c14db051
9 changed files with 194 additions and 143 deletions
+33 -20
View File
@@ -6,13 +6,15 @@ import (
"strings"
"time"
"github.com/grafana/grafana/pkg/apimachinery/identity"
apierrors "k8s.io/apimachinery/pkg/api/errors"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
k8sUser "k8s.io/apiserver/pkg/authentication/user"
k8sRequest "k8s.io/apiserver/pkg/endpoints/request"
"github.com/grafana/grafana/pkg/apimachinery/identity"
"github.com/grafana/grafana/pkg/apimachinery/utils"
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
"github.com/grafana/grafana/pkg/infra/log"
internalfolders "github.com/grafana/grafana/pkg/registry/apis/folders"
@@ -58,7 +60,7 @@ func (ss *FolderUnifiedStoreImpl) Create(ctx context.Context, cmd folder.CreateF
return nil, err
}
folder, _ := internalfolders.UnstructuredToLegacyFolder(*out, cmd.SignedInUser.GetOrgID())
folder, err := internalfolders.UnstructuredToLegacyFolder(out)
if err != nil {
return nil, err
}
@@ -106,10 +108,26 @@ func (ss *FolderUnifiedStoreImpl) Update(ctx context.Context, cmd folder.UpdateF
if err != nil {
return nil, err
}
updated := obj.DeepCopy()
updated, err := internalfolders.LegacyUpdateCommandToUnstructured(obj, &cmd)
if err != nil {
return nil, err
if cmd.NewTitle != nil {
err = unstructured.SetNestedField(updated.Object, *cmd.NewTitle, "spec", "title")
if err != nil {
return nil, err
}
}
if cmd.NewDescription != nil {
err = unstructured.SetNestedField(updated.Object, *cmd.NewDescription, "spec", "description")
if err != nil {
return nil, err
}
}
if cmd.NewParentUID != nil {
meta, err := utils.MetaAccessor(updated)
if err != nil {
return nil, err
}
meta.SetFolder(*cmd.NewParentUID)
}
out, err := client.Update(ctx, updated, v1.UpdateOptions{})
@@ -117,12 +135,7 @@ func (ss *FolderUnifiedStoreImpl) Update(ctx context.Context, cmd folder.UpdateF
return nil, err
}
folder, _ := internalfolders.UnstructuredToLegacyFolder(*out, cmd.SignedInUser.GetOrgID())
if err != nil {
return nil, err
}
return folder, err
return internalfolders.UnstructuredToLegacyFolder(out)
}
// If WithFullpath is true it computes also the full path of a folder.
@@ -164,8 +177,8 @@ func (ss *FolderUnifiedStoreImpl) Get(ctx context.Context, q folder.GetFolderQue
} else if err != nil || out == nil {
return nil, dashboards.ErrFolderNotFound
}
dashFolder, _ := internalfolders.UnstructuredToLegacyFolder(*out, q.SignedInUser.GetOrgID())
return dashFolder, nil
return internalfolders.UnstructuredToLegacyFolder(out)
}
func (ss *FolderUnifiedStoreImpl) GetParents(ctx context.Context, q folder.GetParentsQuery) ([]*folder.Folder, error) {
@@ -193,7 +206,7 @@ func (ss *FolderUnifiedStoreImpl) GetParents(ctx context.Context, q folder.GetPa
return nil, err
}
folder, _ := internalfolders.UnstructuredToLegacyFolder(*out, q.OrgID)
folder, err := internalfolders.UnstructuredToLegacyFolder(out)
if err != nil {
return nil, err
}
@@ -232,9 +245,9 @@ func (ss *FolderUnifiedStoreImpl) GetChildren(ctx context.Context, q folder.GetC
hits := make([]*folder.Folder, 0)
for _, item := range out.Items {
// convert item to legacy folder format
f, _ := internalfolders.UnstructuredToLegacyFolder(item, q.OrgID)
f, err := internalfolders.UnstructuredToLegacyFolder(&item)
if f == nil {
return nil, fmt.Errorf("unable covert unstructured item to legacy folder")
return nil, fmt.Errorf("unable covert unstructured item to legacy folder %w", err)
}
// it we are at root level, skip subfolder
@@ -332,9 +345,9 @@ func (ss *FolderUnifiedStoreImpl) GetFolders(ctx context.Context, q folder.GetFo
m := map[string]*folder.Folder{}
for _, item := range out.Items {
// convert item to legacy folder format
f, _ := internalfolders.UnstructuredToLegacyFolder(item, q.SignedInUser.GetOrgID())
f, err := internalfolders.UnstructuredToLegacyFolder(&item)
if f == nil {
return nil, fmt.Errorf("unable covert unstructured item to legacy folder")
return nil, fmt.Errorf("unable covert unstructured item to legacy folder %w", err)
}
m[f.UID] = f
@@ -392,9 +405,9 @@ func (ss *FolderUnifiedStoreImpl) GetDescendants(ctx context.Context, orgID int6
nodes := map[string]*folder.Folder{}
for _, item := range out.Items {
// convert item to legacy folder format
f, _ := internalfolders.UnstructuredToLegacyFolder(item, orgID)
f, err := internalfolders.UnstructuredToLegacyFolder(&item)
if f == nil {
return nil, fmt.Errorf("unable covert unstructured item to legacy folder")
return nil, fmt.Errorf("unable covert unstructured item to legacy folder %w", err)
}
nodes[f.UID] = f