feat: provides MT Dashboard service (#110447)
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
package conversion
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grafana/authlib/types"
|
||||
"github.com/grafana/grafana/pkg/apimachinery/identity"
|
||||
"k8s.io/apimachinery/pkg/conversion"
|
||||
"k8s.io/utils/ptr"
|
||||
|
||||
@@ -10,6 +14,7 @@ import (
|
||||
dashv2beta1 "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v2beta1"
|
||||
"github.com/grafana/grafana/apps/dashboard/pkg/migration"
|
||||
"github.com/grafana/grafana/apps/dashboard/pkg/migration/schemaversion"
|
||||
"k8s.io/apiserver/pkg/endpoints/request"
|
||||
)
|
||||
|
||||
func Convert_V0_to_V1(in *dashv0.Dashboard, out *dashv1.Dashboard, scope conversion.Scope) error {
|
||||
@@ -23,7 +28,23 @@ func Convert_V0_to_V1(in *dashv0.Dashboard, out *dashv1.Dashboard, scope convers
|
||||
},
|
||||
}
|
||||
|
||||
if err := migration.Migrate(out.Spec.Object, schemaversion.LATEST_VERSION); err != nil {
|
||||
// the scope passed into this function is used in k8s apimachinery for migrations, but we also need the context
|
||||
// to have what grafana expects in the request context, so that we can retrieve datasources for migrating
|
||||
// some of the old dashboard schemas (these migrations used to be run in the frontend)
|
||||
ctx := request.WithNamespace(context.Background(), in.GetNamespace())
|
||||
nsInfo, err := types.ParseNamespace(in.GetNamespace())
|
||||
if err != nil {
|
||||
out.Status.Conversion.Failed = true
|
||||
out.Status.Conversion.Error = ptr.To(err.Error())
|
||||
return nil
|
||||
}
|
||||
|
||||
// a background service identity is used here because the user who is reading the specific dashboard
|
||||
// may not have access to all the datasources in the dashboard, but the migration still needs to take place
|
||||
// in order to be able to convert between k8s versions (so that we have a guaranteed structure to convert between)
|
||||
ctx, _ = identity.WithServiceIdentity(ctx, nsInfo.OrgID)
|
||||
|
||||
if err := migration.Migrate(ctx, out.Spec.Object, schemaversion.LATEST_VERSION); err != nil {
|
||||
out.Status.Conversion.Failed = true
|
||||
out.Status.Conversion.Error = ptr.To(err.Error())
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user