mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #13360 from sapcc/symlinks
resolve symlink on each run
This commit is contained in:
commit
464f3f738f
@ -43,26 +43,6 @@ func NewDashboardFileReader(cfg *DashboardsAsConfig, log log.Logger) (*fileReade
|
|||||||
log.Warn("[Deprecated] The folder property is deprecated. Please use path instead.")
|
log.Warn("[Deprecated] The folder property is deprecated. Please use path instead.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
|
||||||
log.Error("Cannot read directory", "error", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
copy := path
|
|
||||||
path, err := filepath.Abs(path)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Could not create absolute path ", "path", 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: path,
|
Path: path,
|
||||||
@ -99,7 +79,8 @@ func (fr *fileReader) ReadAndListen(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (fr *fileReader) startWalkingDisk() error {
|
func (fr *fileReader) startWalkingDisk() error {
|
||||||
if _, err := os.Stat(fr.Path); err != nil {
|
resolvedPath := fr.resolvePath(fr.Path)
|
||||||
|
if _, err := os.Stat(resolvedPath); err != nil {
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -116,7 +97,7 @@ func (fr *fileReader) startWalkingDisk() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
filesFoundOnDisk := map[string]os.FileInfo{}
|
filesFoundOnDisk := map[string]os.FileInfo{}
|
||||||
err = filepath.Walk(fr.Path, createWalkFn(filesFoundOnDisk))
|
err = filepath.Walk(resolvedPath, createWalkFn(filesFoundOnDisk))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -344,6 +325,29 @@ func (fr *fileReader) readDashboardFromFile(path string, lastModified time.Time,
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fr *fileReader) resolvePath(path string) string {
|
||||||
|
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||||
|
fr.log.Error("Cannot read directory", "error", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
copy := path
|
||||||
|
path, err := filepath.Abs(path)
|
||||||
|
if err != nil {
|
||||||
|
fr.log.Error("Could not create absolute path ", "path", path)
|
||||||
|
}
|
||||||
|
|
||||||
|
path, err = filepath.EvalSymlinks(path)
|
||||||
|
if err != nil {
|
||||||
|
fr.log.Error("Failed to read content of symlinked path: %s", path)
|
||||||
|
}
|
||||||
|
|
||||||
|
if path == "" {
|
||||||
|
path = copy
|
||||||
|
fr.log.Info("falling back to original path due to EvalSymlink/Abs failure")
|
||||||
|
}
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
|
||||||
type provisioningMetadata struct {
|
type provisioningMetadata struct {
|
||||||
uid string
|
uid string
|
||||||
title string
|
title string
|
||||||
|
@ -30,10 +30,11 @@ func TestProvsionedSymlinkedFolder(t *testing.T) {
|
|||||||
want, err := filepath.Abs(containingId)
|
want, err := filepath.Abs(containingId)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("expected err to be nill")
|
t.Errorf("expected err to be nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
if reader.Path != want {
|
resolvedPath := reader.resolvePath(reader.Path)
|
||||||
t.Errorf("got %s want %s", reader.Path, want)
|
if resolvedPath != want {
|
||||||
|
t.Errorf("got %s want %s", resolvedPath, want)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,8 @@ func TestCreatingNewDashboardFileReader(t *testing.T) {
|
|||||||
reader, err := NewDashboardFileReader(cfg, log.New("test-logger"))
|
reader, err := NewDashboardFileReader(cfg, log.New("test-logger"))
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
So(filepath.IsAbs(reader.Path), ShouldBeTrue)
|
resolvedPath := reader.resolvePath(reader.Path)
|
||||||
|
So(filepath.IsAbs(resolvedPath), ShouldBeTrue)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user