Unistore: Ensure deprecated Folder ID gets stored on all modes (#99043)

* Unistore: Ensure deprecated Folder ID gets stored on all modes

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>

---------

Signed-off-by: Maicon Costa <maiconscosta@gmail.com>
This commit is contained in:
maicon 2025-01-16 15:01:00 -03:00 committed by GitHub
parent 8e59f618c1
commit b4ec11e150
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 10 additions and 25 deletions

View File

@ -3,7 +3,6 @@ package folders
import ( import (
"fmt" "fmt"
"regexp" "regexp"
"strconv"
"time" "time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -80,10 +79,7 @@ func UnstructuredToLegacyFolder(item unstructured.Unstructured, orgID int64) (*f
return nil, "" return nil, ""
} }
id, err := getLegacyID(meta) id := meta.GetDeprecatedInternalID() // nolint:staticcheck
if err != nil {
return nil, ""
}
created, err := getCreated(meta) created, err := getCreated(meta)
if err != nil { if err != nil {
@ -161,6 +157,8 @@ func convertToK8sResource(v *folder.Folder, namespacer request.NamespaceMapper)
meta.SetUpdatedTimestamp(&v.Updated) meta.SetUpdatedTimestamp(&v.Updated)
if v.ID > 0 { // nolint:staticcheck if v.ID > 0 { // nolint:staticcheck
meta.SetDeprecatedInternalID(v.ID) // nolint:staticcheck
meta.SetRepositoryInfo(&utils.ResourceRepositoryInfo{ meta.SetRepositoryInfo(&utils.ResourceRepositoryInfo{
Name: "SQL", Name: "SQL",
Path: fmt.Sprintf("%d", v.ID), // nolint:staticcheck Path: fmt.Sprintf("%d", v.ID), // nolint:staticcheck
@ -201,23 +199,6 @@ func setParentUID(u *unstructured.Unstructured, parentUid string) error {
return nil return nil
} }
func getLegacyID(meta utils.GrafanaMetaAccessor) (int64, error) {
var i int64
repo, err := meta.GetRepositoryInfo()
if err != nil {
return i, err
}
if repo != nil && repo.Name == "SQL" {
i, err = strconv.ParseInt(repo.Path, 10, 64)
if err != nil {
return i, err
}
}
return i, nil
}
func getURL(meta utils.GrafanaMetaAccessor, title string) string { func getURL(meta utils.GrafanaMetaAccessor, title string) string {
slug := slugify.Slugify(title) slug := slugify.Slugify(title)
uid := meta.GetName() uid := meta.GetName()

View File

@ -18,13 +18,11 @@ import (
common "k8s.io/kube-openapi/pkg/common" common "k8s.io/kube-openapi/pkg/common"
"k8s.io/kube-openapi/pkg/spec3" "k8s.io/kube-openapi/pkg/spec3"
grafanarest "github.com/grafana/grafana/pkg/apiserver/rest"
"github.com/grafana/grafana/pkg/storage/unified/resource"
"github.com/grafana/grafana/pkg/apimachinery/identity" "github.com/grafana/grafana/pkg/apimachinery/identity"
"github.com/grafana/grafana/pkg/apimachinery/utils" "github.com/grafana/grafana/pkg/apimachinery/utils"
"github.com/grafana/grafana/pkg/apis/folder/v0alpha1" "github.com/grafana/grafana/pkg/apis/folder/v0alpha1"
grafanaregistry "github.com/grafana/grafana/pkg/apiserver/registry/generic" grafanaregistry "github.com/grafana/grafana/pkg/apiserver/registry/generic"
grafanarest "github.com/grafana/grafana/pkg/apiserver/rest"
"github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/accesscontrol"
"github.com/grafana/grafana/pkg/services/apiserver/builder" "github.com/grafana/grafana/pkg/services/apiserver/builder"
"github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request"
@ -32,6 +30,8 @@ import (
"github.com/grafana/grafana/pkg/services/featuremgmt" "github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/folder" "github.com/grafana/grafana/pkg/services/folder"
"github.com/grafana/grafana/pkg/setting" "github.com/grafana/grafana/pkg/setting"
"github.com/grafana/grafana/pkg/storage/unified/apistore"
"github.com/grafana/grafana/pkg/storage/unified/resource"
) )
var _ builder.APIGroupBuilder = (*FolderAPIBuilder)(nil) var _ builder.APIGroupBuilder = (*FolderAPIBuilder)(nil)
@ -134,6 +134,9 @@ func (b *FolderAPIBuilder) UpdateAPIGroupInfo(apiGroupInfo *genericapiserver.API
cfg: b.cfg, cfg: b.cfg,
} }
opts.StorageOptions(resourceInfo.GroupResource(), apistore.StorageOptions{
RequireDeprecatedInternalID: true})
storage := map[string]rest.Storage{} storage := map[string]rest.Storage{}
storage[resourceInfo.StoragePath()] = legacyStore storage[resourceInfo.StoragePath()] = legacyStore
if optsGetter != nil && dualWriteBuilder != nil { if optsGetter != nil && dualWriteBuilder != nil {

View File

@ -398,6 +398,7 @@ func doFolderTests(t *testing.T, helper *apis.K8sTestHelper) *apis.K8sTestHelper
"kind": "Folder", "kind": "Folder",
"metadata": { "metadata": {
"creationTimestamp": "${creationTimestamp}", "creationTimestamp": "${creationTimestamp}",
"labels": {"grafana.app/deprecatedInternalID":"1"},
"name": "` + uid + `", "name": "` + uid + `",
"namespace": "default", "namespace": "default",
"resourceVersion": "${resourceVersion}", "resourceVersion": "${resourceVersion}",