60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package libraryelements
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
|
|
"github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v0alpha1"
|
|
"github.com/grafana/grafana/pkg/apimachinery/utils"
|
|
"github.com/grafana/grafana/pkg/services/libraryelements/model"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
)
|
|
|
|
func ToCreateLibraryElementCommand(raw runtime.Object) (*model.CreateLibraryElementCommand, error) {
|
|
obj, err := utils.MetaAccessor(raw)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
folder := obj.GetFolder()
|
|
cmd := &model.CreateLibraryElementCommand{
|
|
UID: obj.GetName(),
|
|
FolderUID: &folder,
|
|
Kind: 1, // the only kind... LibraryPanel
|
|
Name: obj.FindTitle("library panel"),
|
|
}
|
|
if cmd.UID == "" {
|
|
if obj.GetGenerateName() == "" {
|
|
return nil, fmt.Errorf("expecting either name or generateName property")
|
|
}
|
|
cmd.UID = obj.GetGenerateName() + util.GenerateShortUID()
|
|
}
|
|
cmd.Model, err = toRawMessage(raw)
|
|
return cmd, err
|
|
}
|
|
|
|
func ToPatchLibraryElementCommand(raw runtime.Object) (*model.PatchLibraryElementCommand, error) {
|
|
obj, err := utils.MetaAccessor(raw)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
folder := obj.GetFolder()
|
|
cmd := &model.PatchLibraryElementCommand{
|
|
UID: obj.GetName(),
|
|
FolderUID: &folder,
|
|
Kind: 1, // the only kind... LibraryPanel
|
|
Name: obj.FindTitle("library panel"),
|
|
}
|
|
cmd.Model, err = toRawMessage(raw)
|
|
return cmd, err
|
|
}
|
|
|
|
func toRawMessage(raw runtime.Object) (json.RawMessage, error) {
|
|
switch obj := raw.(type) {
|
|
case *v0alpha1.LibraryPanel:
|
|
return json.Marshal(obj.Spec)
|
|
}
|
|
return nil, fmt.Errorf("unsupported library panel type: %T", raw)
|
|
}
|