Merge pull request #12007 from bergquist/provisioning_symlinked_folders

Add support for symlinked folders in dashboard provisioning
pull/12117/head
Carl Bergquist 7 years ago committed by GitHub
commit 7214ee9024
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      pkg/services/provisioning/dashboards/file_reader.go
  2. 39
      pkg/services/provisioning/dashboards/file_reader_linux_test.go
  3. 11
      pkg/services/provisioning/dashboards/file_reader_test.go
  4. 1
      pkg/services/provisioning/dashboards/testdata/test-dashboards/symlink

@ -47,15 +47,25 @@ func NewDashboardFileReader(cfg *DashboardsAsConfig, log log.Logger) (*fileReade
log.Error("Cannot read directory", "error", err)
}
absPath, err := filepath.Abs(path)
copy := path
path, err := filepath.Abs(path)
if err != nil {
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{
Cfg: cfg,
Path: absPath,
Path: path,
log: log,
dashboardService: dashboards.NewProvisioningService(),
}, nil

@ -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)
}
}

@ -49,13 +49,16 @@ func TestCreatingNewDashboardFileReader(t *testing.T) {
})
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"))
So(err, ShouldBeNil)
if runtime.GOOS != "windows" {
So(reader.Path, ShouldEqual, "/var/lib/grafana/dashboards")
}
So(reader.Path, ShouldEqual, fullPath)
So(filepath.IsAbs(reader.Path), ShouldBeTrue)
})

Loading…
Cancel
Save