Plugins: Add forward_host_env_vars setting (#79333)

* Plugins: Add forward_host_env_vars_plugins setting

* Renamed forward_host_env_vars_plugins to forward_host_env_vars

* Add readPluginIDsList

* refactoring

* lint

* Use util.SplitString
This commit is contained in:
Giuseppe Guerra
2023-12-13 11:25:17 +02:00
committed by GitHub
parent 106903b549
commit 0d1d437c86
8 changed files with 82 additions and 64 deletions
+1
View File
@@ -248,6 +248,7 @@ type Cfg struct {
DisablePlugins []string
HideAngularDeprecation []string
PluginInstallToken string
ForwardHostEnvVars []string
PluginsCDNURLTemplate string
PluginLogBackendRequests bool
+8 -29
View File
@@ -4,6 +4,8 @@ import (
"strings"
"gopkg.in/ini.v1"
"github.com/grafana/grafana/pkg/util"
)
// PluginSettings maps plugin id to map of key/value settings.
@@ -33,40 +35,17 @@ func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error {
cfg.PluginSkipPublicKeyDownload = pluginsSection.Key("public_key_retrieval_disabled").MustBool(false)
cfg.PluginForcePublicKeyDownload = pluginsSection.Key("public_key_retrieval_on_startup").MustBool(false)
pluginsAllowUnsigned := pluginsSection.Key("allow_loading_unsigned_plugins").MustString("")
for _, plug := range strings.Split(pluginsAllowUnsigned, ",") {
plug = strings.TrimSpace(plug)
cfg.PluginsAllowUnsigned = append(cfg.PluginsAllowUnsigned, plug)
}
disablePlugins := pluginsSection.Key("disable_plugins").MustString("")
for _, plug := range strings.Split(disablePlugins, ",") {
plug = strings.TrimSpace(plug)
if plug != "" {
cfg.DisablePlugins = append(cfg.DisablePlugins, plug)
}
}
hideAngularDeprecation := pluginsSection.Key("hide_angular_deprecation").MustString("")
for _, id := range strings.Split(hideAngularDeprecation, ",") {
id = strings.TrimSpace(id)
if id == "" {
continue
}
cfg.HideAngularDeprecation = append(cfg.HideAngularDeprecation, id)
}
cfg.PluginsAllowUnsigned = util.SplitString(pluginsSection.Key("allow_loading_unsigned_plugins").MustString(""))
cfg.DisablePlugins = util.SplitString(pluginsSection.Key("disable_plugins").MustString(""))
cfg.HideAngularDeprecation = util.SplitString(pluginsSection.Key("hide_angular_deprecation").MustString(""))
cfg.ForwardHostEnvVars = util.SplitString(pluginsSection.Key("forward_host_env_vars").MustString(""))
cfg.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/")
cfg.PluginAdminEnabled = pluginsSection.Key("plugin_admin_enabled").MustBool(true)
cfg.PluginAdminExternalManageEnabled = pluginsSection.Key("plugin_admin_external_manage_enabled").MustBool(false)
catalogHiddenPlugins := pluginsSection.Key("plugin_catalog_hidden_plugins").MustString("")
cfg.PluginCatalogHiddenPlugins = util.SplitString(pluginsSection.Key("plugin_catalog_hidden_plugins").MustString(""))
for _, plug := range strings.Split(catalogHiddenPlugins, ",") {
plug = strings.TrimSpace(plug)
cfg.PluginCatalogHiddenPlugins = append(cfg.PluginCatalogHiddenPlugins, plug)
}
// Pull disablep plugins from the catalog
// Pull disabled plugins from the catalog
cfg.PluginCatalogHiddenPlugins = append(cfg.PluginCatalogHiddenPlugins, cfg.DisablePlugins...)
// Plugins CDN settings
+48 -15
View File
@@ -1,6 +1,7 @@
package setting
import (
"strings"
"testing"
"github.com/stretchr/testify/require"
@@ -43,23 +44,55 @@ func TestPluginSettings(t *testing.T) {
}
func Test_readPluginSettings(t *testing.T) {
t.Run("should parse plugin ids", func(t *testing.T) {
cfg := NewCfg()
sec, err := cfg.Raw.NewSection("plugins")
require.NoError(t, err)
_, err = sec.NewKey("disable_plugins", "plugin1,plugin2")
require.NoError(t, err)
t.Run("should parse separated plugin ids", func(t *testing.T) {
for _, tc := range []struct {
name string
f func(ids ...string) string
}{
{
name: "commas",
f: func(ids ...string) string {
return strings.Join(ids, ",")
},
},
{
name: "commas and a space",
f: func(ids ...string) string {
return strings.Join(ids, ", ")
},
},
{
name: "spaces",
f: func(ids ...string) string {
return strings.Join(ids, " ")
},
},
{
name: "json-like",
f: func(ids ...string) string {
return `["` + strings.Join(ids, `","`) + `"]`
},
},
} {
t.Run(tc.name, func(t *testing.T) {
cfg := NewCfg()
sec, err := cfg.Raw.NewSection("plugins")
require.NoError(t, err)
_, err = sec.NewKey("disable_plugins", tc.f("plugin1", "plugin2"))
require.NoError(t, err)
_, err = sec.NewKey("plugin_catalog_hidden_plugins", "plugin3")
require.NoError(t, err)
_, err = sec.NewKey("plugin_catalog_hidden_plugins", tc.f("plugin3"))
require.NoError(t, err)
_, err = sec.NewKey("hide_angular_deprecation", "a,b,c")
require.NoError(t, err)
_, err = sec.NewKey("hide_angular_deprecation", tc.f("a", "b", "c"))
require.NoError(t, err)
err = cfg.readPluginSettings(cfg.Raw)
require.NoError(t, err)
require.Equal(t, []string{"plugin1", "plugin2"}, cfg.DisablePlugins)
require.Equal(t, []string{"plugin3", "plugin1", "plugin2"}, cfg.PluginCatalogHiddenPlugins)
require.Equal(t, []string{"a", "b", "c"}, cfg.HideAngularDeprecation)
err = cfg.readPluginSettings(cfg.Raw)
require.NoError(t, err)
require.Equal(t, []string{"plugin1", "plugin2"}, cfg.DisablePlugins)
require.Equal(t, []string{"plugin3", "plugin1", "plugin2"}, cfg.PluginCatalogHiddenPlugins)
require.Equal(t, []string{"a", "b", "c"}, cfg.HideAngularDeprecation)
})
}
})
}