Merge pull request #12007 from bergquist/provisioning_symlinked_folders

Add support for symlinked folders in dashboard provisioning
This commit is contained in:
Carl Bergquist 2018-06-04 16:00:32 +02:00 committed by GitHub
commit 7214ee9024
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 7 deletions

View File

@ -47,15 +47,25 @@ func NewDashboardFileReader(cfg *DashboardsAsConfig, log log.Logger) (*fileReade
log.Error("Cannot read directory", "error", err) log.Error("Cannot read directory", "error", err)
} }
absPath, err := filepath.Abs(path) copy := path
path, err := filepath.Abs(path)
if err != nil { if err != nil {
log.Error("Could not create absolute path ", "path", path) log.Error("Could not create absolute path ", "path", path)
absPath = path //if .Abs return an error we fallback to path }
path, err = filepath.EvalSymlinks(path)
if err != nil {
log.Error("Failed to read content of symlinked path: %s", path)
}
if path == "" {
path = copy
log.Info("falling back to original path due to EvalSymlink/Abs failure")
} }
return &fileReader{ return &fileReader{
Cfg: cfg, Cfg: cfg,
Path: absPath, Path: path,
log: log, log: log,
dashboardService: dashboards.NewProvisioningService(), dashboardService: dashboards.NewProvisioningService(),
}, nil }, nil

View File

@ -0,0 +1,39 @@
// +build linux
package dashboards
import (
"path/filepath"
"testing"
"github.com/grafana/grafana/pkg/log"
)
var (
symlinkedFolder = "testdata/test-dashboards/symlink"
)
func TestProvsionedSymlinkedFolder(t *testing.T) {
cfg := &DashboardsAsConfig{
Name: "Default",
Type: "file",
OrgId: 1,
Folder: "",
Options: map[string]interface{}{"path": symlinkedFolder},
}
reader, err := NewDashboardFileReader(cfg, log.New("test-logger"))
if err != nil {
t.Error("expected err to be nil")
}
want, err := filepath.Abs(containingId)
if err != nil {
t.Errorf("expected err to be nill")
}
if reader.Path != want {
t.Errorf("got %s want %s", reader.Path, want)
}
}

View File

@ -49,13 +49,16 @@ func TestCreatingNewDashboardFileReader(t *testing.T) {
}) })
Convey("using full path", func() { Convey("using full path", func() {
cfg.Options["folder"] = "/var/lib/grafana/dashboards" fullPath := "/var/lib/grafana/dashboards"
if runtime.GOOS == "windows" {
fullPath = `c:\var\lib\grafana`
}
cfg.Options["folder"] = fullPath
reader, err := NewDashboardFileReader(cfg, log.New("test-logger")) reader, err := NewDashboardFileReader(cfg, log.New("test-logger"))
So(err, ShouldBeNil) So(err, ShouldBeNil)
if runtime.GOOS != "windows" { So(reader.Path, ShouldEqual, fullPath)
So(reader.Path, ShouldEqual, "/var/lib/grafana/dashboards")
}
So(filepath.IsAbs(reader.Path), ShouldBeTrue) So(filepath.IsAbs(reader.Path), ShouldBeTrue)
}) })

View File

@ -0,0 +1 @@
containing-id/