Merge pull request #13360 from sapcc/symlinks

resolve symlink on each run
This commit is contained in:
Carl Bergquist 2018-09-27 09:21:29 +02:00 committed by GitHub
commit 464f3f738f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 26 deletions

View File

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

View File

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

View File

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