mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Provisioning: Validate that dashboard providers have unique names (#22898)
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com> Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com> Co-authored-by: bergquist <carl.bergquist@gmail.com>
This commit is contained in:
parent
f15593684a
commit
9f2af718dc
@ -40,7 +40,7 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if v1 != nil {
|
if v1 != nil {
|
||||||
return v1.mapToDashboardAsConfig(), nil
|
return v1.mapToDashboardsAsConfig()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var v0 []*DashboardsAsConfigV0
|
var v0 []*DashboardsAsConfigV0
|
||||||
@ -51,7 +51,7 @@ func (cr *configReader) parseConfigs(file os.FileInfo) ([]*DashboardsAsConfig, e
|
|||||||
|
|
||||||
if v0 != nil {
|
if v0 != nil {
|
||||||
cr.log.Warn("[Deprecated] the dashboard provisioning config is outdated. please upgrade", "filename", filename)
|
cr.log.Warn("[Deprecated] the dashboard provisioning config is outdated. please upgrade", "filename", filename)
|
||||||
return mapV0ToDashboardAsConfig(v0), nil
|
return mapV0ToDashboardsAsConfig(v0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package dashboards
|
package dashboards
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/grafana/grafana/pkg/services/provisioning/values"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||||
"github.com/grafana/grafana/pkg/services/dashboards"
|
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/models"
|
"github.com/grafana/grafana/pkg/models"
|
||||||
|
"github.com/grafana/grafana/pkg/services/dashboards"
|
||||||
|
"github.com/grafana/grafana/pkg/services/provisioning/values"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DashboardsAsConfig struct {
|
type DashboardsAsConfig struct {
|
||||||
@ -73,10 +73,16 @@ func createDashboardJson(data *simplejson.Json, lastModified time.Time, cfg *Das
|
|||||||
return dash, nil
|
return dash, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func mapV0ToDashboardAsConfig(v0 []*DashboardsAsConfigV0) []*DashboardsAsConfig {
|
func mapV0ToDashboardsAsConfig(v0 []*DashboardsAsConfigV0) ([]*DashboardsAsConfig, error) {
|
||||||
var r []*DashboardsAsConfig
|
var r []*DashboardsAsConfig
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
|
||||||
for _, v := range v0 {
|
for _, v := range v0 {
|
||||||
|
if _, ok := seen[v.Name]; ok {
|
||||||
|
return nil, fmt.Errorf("dashboard name %q is not unique", v.Name)
|
||||||
|
}
|
||||||
|
seen[v.Name] = true
|
||||||
|
|
||||||
r = append(r, &DashboardsAsConfig{
|
r = append(r, &DashboardsAsConfig{
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Type: v.Type,
|
Type: v.Type,
|
||||||
@ -91,13 +97,19 @@ func mapV0ToDashboardAsConfig(v0 []*DashboardsAsConfigV0) []*DashboardsAsConfig
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return r
|
return r, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dc *DashboardAsConfigV1) mapToDashboardAsConfig() []*DashboardsAsConfig {
|
func (dc *DashboardAsConfigV1) mapToDashboardsAsConfig() ([]*DashboardsAsConfig, error) {
|
||||||
var r []*DashboardsAsConfig
|
var r []*DashboardsAsConfig
|
||||||
|
seen := make(map[string]bool)
|
||||||
|
|
||||||
for _, v := range dc.Providers {
|
for _, v := range dc.Providers {
|
||||||
|
if _, ok := seen[v.Name.Value()]; ok {
|
||||||
|
return nil, fmt.Errorf("dashboard name %q is not unique", v.Name.Value())
|
||||||
|
}
|
||||||
|
seen[v.Name.Value()] = true
|
||||||
|
|
||||||
r = append(r, &DashboardsAsConfig{
|
r = append(r, &DashboardsAsConfig{
|
||||||
Name: v.Name.Value(),
|
Name: v.Name.Value(),
|
||||||
Type: v.Type.Value(),
|
Type: v.Type.Value(),
|
||||||
@ -112,5 +124,5 @@ func (dc *DashboardAsConfigV1) mapToDashboardAsConfig() []*DashboardsAsConfig {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return r
|
return r, nil
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,7 @@ func (ps *provisioningServiceImpl) Run(ctx context.Context) error {
|
|||||||
err := ps.ProvisionDashboards()
|
err := ps.ProvisionDashboards()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ps.log.Error("Failed to provision dashboard", "error", err)
|
ps.log.Error("Failed to provision dashboard", "error", err)
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
Loading…
Reference in New Issue
Block a user