Backend Plugins: Plugin configuration using Grafana config (#23451)
Enables adding a section `plugin.<plugin id>` and key/value to Grafana configuration file which will be converted and sent as environment variables to the backend plugin. Also sends some additional environment variables, Grafana version (GF_VERSION), Grafana edition (GF_EDITION) and enterprise license path (GF_ENTERPRISE_LICENSE_PATH). Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com> Fixes #21515,
This commit is contained in:
co-authored by
Arve Knudsen
parent
941cd59894
commit
34266cd369
@@ -259,6 +259,7 @@ type Cfg struct {
|
||||
MetricsEndpointDisableTotalStats bool
|
||||
PluginsEnableAlpha bool
|
||||
PluginsAppsSkipVerifyTLS bool
|
||||
PluginSettings PluginSettings
|
||||
DisableSanitizeHtml bool
|
||||
EnterpriseLicensePath string
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"gopkg.in/ini.v1"
|
||||
)
|
||||
|
||||
// PluginSettings maps plugin id to map of key/value settings.
|
||||
type PluginSettings map[string]map[string]string
|
||||
|
||||
func extractPluginSettings(sections []*ini.Section) PluginSettings {
|
||||
psMap := PluginSettings{}
|
||||
for _, section := range sections {
|
||||
sectionName := section.Name()
|
||||
if !strings.HasPrefix(sectionName, "plugin.") {
|
||||
continue
|
||||
}
|
||||
|
||||
pluginID := strings.Replace(sectionName, "plugin.", "", 1)
|
||||
psMap[pluginID] = section.KeysHash()
|
||||
}
|
||||
|
||||
return psMap
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestPluginSettings(t *testing.T) {
|
||||
cfg := NewCfg()
|
||||
sec, err := cfg.Raw.NewSection("plugin")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("key", "value")
|
||||
require.NoError(t, err)
|
||||
|
||||
sec, err = cfg.Raw.NewSection("plugin.plugin")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("key1", "value1")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("key2", "value2")
|
||||
require.NoError(t, err)
|
||||
|
||||
sec, err = cfg.Raw.NewSection("plugin.plugin2")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("key3", "value3")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("key4", "value4")
|
||||
require.NoError(t, err)
|
||||
|
||||
sec, err = cfg.Raw.NewSection("other")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("keySomething", "whatever")
|
||||
require.NoError(t, err)
|
||||
|
||||
ps := extractPluginSettings(cfg.Raw.Sections())
|
||||
require.Len(t, ps, 2)
|
||||
require.Len(t, ps["plugin"], 2)
|
||||
require.Equal(t, ps["plugin"]["key1"], "value1")
|
||||
require.Equal(t, ps["plugin"]["key2"], "value2")
|
||||
require.Len(t, ps["plugin2"], 2)
|
||||
require.Equal(t, ps["plugin2"]["key3"], "value3")
|
||||
require.Equal(t, ps["plugin2"]["key4"], "value4")
|
||||
}
|
||||
Reference in New Issue
Block a user