51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package reconcilers
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
foldersKind "github.com/grafana/grafana/apps/folder/pkg/apis/folder/v1beta1"
|
|
"github.com/grafana/grafana/pkg/apimachinery/utils"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/client-go/dynamic"
|
|
"k8s.io/client-go/rest"
|
|
)
|
|
|
|
var _ FolderStore = (*APIFolderStore)(nil)
|
|
|
|
func NewAPIFolderStore(config *rest.Config) FolderStore {
|
|
return &APIFolderStore{config}
|
|
}
|
|
|
|
type APIFolderStore struct {
|
|
config *rest.Config
|
|
}
|
|
|
|
func (s *APIFolderStore) GetFolderParent(ctx context.Context, namespace, uid string) (string, error) {
|
|
client, err := s.client(namespace)
|
|
if err != nil {
|
|
return "", fmt.Errorf("create resource client: %w", err)
|
|
}
|
|
|
|
// Get the folder by UID
|
|
unstructuredObj, err := client.Get(ctx, uid, metav1.GetOptions{})
|
|
if err != nil {
|
|
return "", fmt.Errorf("get folder %s: %w", uid, err)
|
|
}
|
|
|
|
object, err := utils.MetaAccessor(unstructuredObj)
|
|
if err != nil {
|
|
return "", fmt.Errorf("get meta accessor: %w", err)
|
|
}
|
|
|
|
return object.GetFolder(), nil
|
|
}
|
|
|
|
func (s *APIFolderStore) client(namespace string) (dynamic.ResourceInterface, error) {
|
|
client, err := dynamic.NewForConfig(s.config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return client.Resource(foldersKind.FolderResourceInfo.GroupVersionResource()).Namespace(namespace), nil
|
|
}
|