diff --git a/pkg/plugins/backendplugin/manager/manager.go b/pkg/plugins/backendplugin/manager/manager.go index 5c87e408324..a903d4bb2f5 100644 --- a/pkg/plugins/backendplugin/manager/manager.go +++ b/pkg/plugins/backendplugin/manager/manager.go @@ -27,7 +27,10 @@ import ( ) func init() { - registry.RegisterServiceWithPriority(&manager{}, registry.MediumHigh) + registry.RegisterServiceWithPriority(&manager{ + logger: log.New("plugins.backend"), + plugins: map[string]backendplugin.Plugin{}, + }, registry.MediumHigh) } type manager struct { @@ -37,14 +40,9 @@ type manager struct { pluginsMu sync.RWMutex plugins map[string]backendplugin.Plugin logger log.Logger - pluginSettings map[string]pluginSettings } func (m *manager) Init() error { - m.plugins = make(map[string]backendplugin.Plugin) - m.logger = log.New("plugins.backend") - m.pluginSettings = extractPluginSettings(m.Cfg) - return nil } @@ -65,11 +63,6 @@ func (m *manager) Register(pluginID string, factory backendplugin.PluginFactoryF return fmt.Errorf("backend plugin %s already registered", pluginID) } - pluginSettings := pluginSettings{} - if ps, exists := m.pluginSettings[pluginID]; exists { - pluginSettings = ps - } - hostEnv := []string{ fmt.Sprintf("GF_VERSION=%s", m.Cfg.BuildVersion), fmt.Sprintf("GF_EDITION=%s", m.License.Edition()), @@ -89,7 +82,7 @@ func (m *manager) Register(pluginID string, factory backendplugin.PluginFactoryF } hostEnv = append(hostEnv, m.getAWSEnvironmentVariables()...) - + pluginSettings := getPluginSettings(pluginID, m.Cfg) env := pluginSettings.ToEnv("GF_PLUGIN", hostEnv) pluginLogger := m.logger.New("pluginId", pluginID) diff --git a/pkg/plugins/backendplugin/manager/manager_test.go b/pkg/plugins/backendplugin/manager/manager_test.go index 443b61bd721..2e354880d49 100644 --- a/pkg/plugins/backendplugin/manager/manager_test.go +++ b/pkg/plugins/backendplugin/manager/manager_test.go @@ -294,6 +294,8 @@ func newManagerScenario(t *testing.T, managed bool, fn func(t *testing.T, ctx *m Cfg: cfg, License: license, PluginRequestValidator: validator, + logger: log.New("test"), + plugins: map[string]backendplugin.Plugin{}, }, } diff --git a/pkg/plugins/backendplugin/manager/plugin_settings.go b/pkg/plugins/backendplugin/manager/plugin_settings.go index 2b9987e0fd7..4c4b0884720 100644 --- a/pkg/plugins/backendplugin/manager/plugin_settings.go +++ b/pkg/plugins/backendplugin/manager/plugin_settings.go @@ -20,20 +20,15 @@ func (ps pluginSettings) ToEnv(prefix string, hostEnv []string) []string { return env } -func extractPluginSettings(cfg *setting.Cfg) map[string]pluginSettings { - psMap := map[string]pluginSettings{} - for pluginID, settings := range cfg.PluginSettings { - ps := pluginSettings{} - for k, v := range settings { - if k == "path" || strings.ToLower(k) == "id" { - continue - } - - ps[k] = v +func getPluginSettings(plugID string, cfg *setting.Cfg) pluginSettings { + ps := pluginSettings{} + for k, v := range cfg.PluginSettings[plugID] { + if k == "path" || strings.ToLower(k) == "id" { + continue } - psMap[pluginID] = ps + ps[k] = v } - return psMap + return ps } diff --git a/pkg/plugins/backendplugin/manager/plugin_settings_test.go b/pkg/plugins/backendplugin/manager/plugin_settings_test.go index 388993a324c..c7488329d15 100644 --- a/pkg/plugins/backendplugin/manager/plugin_settings_test.go +++ b/pkg/plugins/backendplugin/manager/plugin_settings_test.go @@ -19,25 +19,24 @@ func TestPluginSettings(t *testing.T) { }, } - ps := extractPluginSettings(cfg) - require.Len(t, ps, 1) - require.Len(t, ps["plugin"], 2) + ps := getPluginSettings("plugin", cfg) + require.Len(t, ps, 2) t.Run("Should skip path setting", func(t *testing.T) { cfg.PluginSettings["plugin"]["path"] = "value" - ps := extractPluginSettings(cfg) - require.Len(t, ps["plugin"], 2) + ps := getPluginSettings("plugin", cfg) + require.Len(t, ps, 2) }) t.Run("Should skip id setting", func(t *testing.T) { cfg.PluginSettings["plugin"]["id"] = "value" - ps := extractPluginSettings(cfg) - require.Len(t, ps["plugin"], 2) + ps := getPluginSettings("plugin", cfg) + require.Len(t, ps, 2) }) t.Run("Should return expected environment variables from plugin settings ", func(t *testing.T) { - ps := extractPluginSettings(cfg) - env := ps["plugin"].ToEnv("GF_PLUGIN", []string{"GF_VERSION=6.7.0"}) + ps := getPluginSettings("plugin", cfg) + env := ps.ToEnv("GF_PLUGIN", []string{"GF_VERSION=6.7.0"}) sort.Strings(env) require.Len(t, env, 3) require.EqualValues(t, []string{"GF_PLUGIN_KEY1=value1", "GF_PLUGIN_KEY2=value2", "GF_VERSION=6.7.0"}, env) diff --git a/pkg/plugins/manager/manager.go b/pkg/plugins/manager/manager.go index 2ca996558eb..d8ba6df7a5d 100644 --- a/pkg/plugins/manager/manager.go +++ b/pkg/plugins/manager/manager.go @@ -68,8 +68,9 @@ type PluginManager struct { func init() { registry.Register(®istry.Descriptor{ - Name: "PluginManager", - Instance: newManager(nil), + Name: "PluginManager", + Instance: newManager(nil), + InitPriority: registry.MediumHigh, }) }