From c8382ba435bbb655661eee7b7cd5c9e940dbe265 Mon Sep 17 00:00:00 2001 From: Augustin Husson <4548045+Nexucis@users.noreply.github.com> Date: Tue, 4 Jun 2019 22:23:08 +0200 Subject: [PATCH] Provisioning: Support folder that doesn't exist yet in dashboard provisioning (#17407) closes #17320 --- pkg/services/provisioning/dashboards/dashboard.go | 10 ++++++++-- pkg/services/provisioning/dashboards/file_reader.go | 4 +--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/services/provisioning/dashboards/dashboard.go b/pkg/services/provisioning/dashboards/dashboard.go index 094376e63e9..108b1b126c9 100644 --- a/pkg/services/provisioning/dashboards/dashboard.go +++ b/pkg/services/provisioning/dashboards/dashboard.go @@ -3,6 +3,7 @@ package dashboards import ( "context" "fmt" + "os" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/util/errutil" @@ -38,8 +39,13 @@ func NewDashboardProvisionerImpl(configDirectory string) (*DashboardProvisionerI func (provider *DashboardProvisionerImpl) Provision() error { for _, reader := range provider.fileReaders { - err := reader.startWalkingDisk() - if err != nil { + if err := reader.startWalkingDisk(); err != nil { + if os.IsNotExist(err) { + // don't stop the provisioning service in case the folder is missing. The folder can appear after the startup + provider.log.Warn("Failed to provision config", "name", reader.Cfg.Name, "error", err) + return nil + } + return errutil.Wrapf(err, "Failed to provision config %v", reader.Cfg.Name) } } diff --git a/pkg/services/provisioning/dashboards/file_reader.go b/pkg/services/provisioning/dashboards/file_reader.go index 61f6be457ee..3b47e5014c1 100644 --- a/pkg/services/provisioning/dashboards/file_reader.go +++ b/pkg/services/provisioning/dashboards/file_reader.go @@ -72,9 +72,7 @@ func (fr *fileReader) startWalkingDisk() error { fr.log.Debug("Start walking disk", "path", fr.Path) resolvedPath := fr.resolvedPath() if _, err := os.Stat(resolvedPath); err != nil { - if os.IsNotExist(err) { - return err - } + return err } folderId, err := getOrCreateFolderId(fr.Cfg, fr.dashboardProvisioningService)