Plugins: Add hide_angular_deprecation setting (#79296)

* Add plugins.hide_angular_deprecation config ini

* Add more tests

* Remove the ability to use [plugins.*] hide_angular_deprecation
This commit is contained in:
Giuseppe Guerra 2023-12-12 10:20:21 +01:00 committed by GitHub
parent f040a8321b
commit f76b9f266e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 40 additions and 23 deletions

View File

@ -1533,6 +1533,8 @@ public_key_retrieval_on_startup = false
disable_plugins = disable_plugins =
# Auth token for plugin installations and removal in managed instances # Auth token for plugin installations and removal in managed instances
install_token = install_token =
# Comma separated list of plugin ids for which angular deprecation UI should be disabled
hide_angular_deprecation =
#################################### Grafana Live ########################################## #################################### Grafana Live ##########################################
[live] [live]

View File

@ -45,13 +45,14 @@ type Cfg struct {
Features plugins.FeatureToggles Features plugins.FeatureToggles
AngularSupportEnabled bool AngularSupportEnabled bool
HideAngularDeprecation []string
} }
func NewCfg(devMode bool, pluginsPath string, pluginSettings setting.PluginSettings, pluginsAllowUnsigned []string, func NewCfg(devMode bool, pluginsPath string, pluginSettings setting.PluginSettings, pluginsAllowUnsigned []string,
awsAllowedAuthProviders []string, awsAssumeRoleEnabled bool, awsExternalId string, azure *azsettings.AzureSettings, secureSocksDSProxy setting.SecureSocksDSProxySettings, awsAllowedAuthProviders []string, awsAssumeRoleEnabled bool, awsExternalId string, azure *azsettings.AzureSettings, secureSocksDSProxy setting.SecureSocksDSProxySettings,
grafanaVersion string, logDatasourceRequests bool, pluginsCDNURLTemplate string, appURL string, appSubURL string, tracing Tracing, features plugins.FeatureToggles, angularSupportEnabled bool, grafanaVersion string, logDatasourceRequests bool, pluginsCDNURLTemplate string, appURL string, appSubURL string, tracing Tracing, features plugins.FeatureToggles, angularSupportEnabled bool,
grafanaComURL string, disablePlugins []string) *Cfg { grafanaComURL string, disablePlugins []string, hideAngularDeprecation []string) *Cfg {
return &Cfg{ return &Cfg{
log: log.New("plugin.cfg"), log: log.New("plugin.cfg"),
PluginsPath: pluginsPath, PluginsPath: pluginsPath,
@ -73,5 +74,6 @@ func NewCfg(devMode bool, pluginsPath string, pluginSettings setting.PluginSetti
GrafanaAppSubURL: appSubURL, GrafanaAppSubURL: appSubURL,
Features: features, Features: features,
AngularSupportEnabled: angularSupportEnabled, AngularSupportEnabled: angularSupportEnabled,
HideAngularDeprecation: hideAngularDeprecation,
} }
} }

View File

@ -3,6 +3,7 @@ package validation
import ( import (
"context" "context"
"errors" "errors"
"slices"
"time" "time"
"github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/plugins"
@ -108,6 +109,6 @@ func (a *AngularDetector) Validate(ctx context.Context, p *plugins.Plugin) error
return errors.New("angular plugins are not supported") return errors.New("angular plugins are not supported")
} }
} }
p.Angular.HideDeprecation = a.cfg.PluginSettings[p.ID]["hide_angular_deprecation"] == "true" p.Angular.HideDeprecation = slices.Contains(a.cfg.HideAngularDeprecation, p.ID)
return nil return nil
} }

View File

@ -47,6 +47,7 @@ func ProvideConfig(settingProvider setting.Provider, grafanaCfg *setting.Cfg, fe
grafanaCfg.AngularSupportEnabled, grafanaCfg.AngularSupportEnabled,
grafanaCfg.GrafanaComURL, grafanaCfg.GrafanaComURL,
grafanaCfg.DisablePlugins, grafanaCfg.DisablePlugins,
grafanaCfg.HideAngularDeprecation,
), nil ), nil
} }

View File

@ -1303,25 +1303,21 @@ func TestLoader_HideAngularDeprecation(t *testing.T) {
cfg *config.Cfg cfg *config.Cfg
expHideAngularDeprecation bool expHideAngularDeprecation bool
}{ }{
{name: `without "hide_angular_deprecation" setting`, cfg: &config.Cfg{ {name: "with plugin id in HideAngularDeprecation list", cfg: &config.Cfg{
AngularSupportEnabled: true, AngularSupportEnabled: true,
PluginSettings: setting.PluginSettings{}, HideAngularDeprecation: []string{"one-app", "two-panel", "test-datasource", "three-datasource"},
Features: featuremgmt.WithFeatures(), Features: featuremgmt.WithFeatures(),
}}, }, expHideAngularDeprecation: true},
{name: `with "hide_angular_deprecation" = true`, cfg: &config.Cfg{ {name: "without plugin id in HideAngularDeprecation list", cfg: &config.Cfg{
AngularSupportEnabled: true, AngularSupportEnabled: true,
PluginSettings: setting.PluginSettings{ HideAngularDeprecation: []string{"one-app", "two-panel", "three-datasource"},
"plugin-id": map[string]string{"hide_angular_deprecation": "true"}, Features: featuremgmt.WithFeatures(),
}, }, expHideAngularDeprecation: false},
Features: featuremgmt.WithFeatures(), {name: "with empty HideAngularDeprecation", cfg: &config.Cfg{
}}, AngularSupportEnabled: true,
{name: `with "hide_angular_deprecation" = false`, cfg: &config.Cfg{ HideAngularDeprecation: nil,
AngularSupportEnabled: true, Features: featuremgmt.WithFeatures(),
PluginSettings: setting.PluginSettings{ }, expHideAngularDeprecation: false},
"plugin-id": map[string]string{"hide_angular_deprecation": "false"},
},
Features: featuremgmt.WithFeatures(),
}},
} { } {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
l := newLoaderWithOpts(t, tc.cfg, loaderDepOpts{ l := newLoaderWithOpts(t, tc.cfg, loaderDepOpts{

View File

@ -246,6 +246,7 @@ type Cfg struct {
PluginForcePublicKeyDownload bool PluginForcePublicKeyDownload bool
PluginSkipPublicKeyDownload bool PluginSkipPublicKeyDownload bool
DisablePlugins []string DisablePlugins []string
HideAngularDeprecation []string
PluginInstallToken string PluginInstallToken string
PluginsCDNURLTemplate string PluginsCDNURLTemplate string

View File

@ -48,6 +48,15 @@ func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error {
} }
} }
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.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/") cfg.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/")
cfg.PluginAdminEnabled = pluginsSection.Key("plugin_admin_enabled").MustBool(true) cfg.PluginAdminEnabled = pluginsSection.Key("plugin_admin_enabled").MustBool(true)
cfg.PluginAdminExternalManageEnabled = pluginsSection.Key("plugin_admin_external_manage_enabled").MustBool(false) cfg.PluginAdminExternalManageEnabled = pluginsSection.Key("plugin_admin_external_manage_enabled").MustBool(false)

View File

@ -43,18 +43,23 @@ func TestPluginSettings(t *testing.T) {
} }
func Test_readPluginSettings(t *testing.T) { func Test_readPluginSettings(t *testing.T) {
t.Run("should parse disable_plugins", func(t *testing.T) { t.Run("should parse plugin ids", func(t *testing.T) {
cfg := NewCfg() cfg := NewCfg()
sec, err := cfg.Raw.NewSection("plugins") sec, err := cfg.Raw.NewSection("plugins")
require.NoError(t, err) require.NoError(t, err)
_, err = sec.NewKey("disable_plugins", "plugin1,plugin2") _, err = sec.NewKey("disable_plugins", "plugin1,plugin2")
require.NoError(t, err) require.NoError(t, err)
_, err = sec.NewKey("plugin_catalog_hidden_plugins", "plugin3") _, err = sec.NewKey("plugin_catalog_hidden_plugins", "plugin3")
require.NoError(t, err) require.NoError(t, err)
_, err = sec.NewKey("hide_angular_deprecation", "a,b,c")
require.NoError(t, err)
err = cfg.readPluginSettings(cfg.Raw) err = cfg.readPluginSettings(cfg.Raw)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, []string{"plugin1", "plugin2"}, cfg.DisablePlugins) require.Equal(t, []string{"plugin1", "plugin2"}, cfg.DisablePlugins)
require.Equal(t, []string{"plugin3", "plugin1", "plugin2"}, cfg.PluginCatalogHiddenPlugins) require.Equal(t, []string{"plugin3", "plugin1", "plugin2"}, cfg.PluginCatalogHiddenPlugins)
require.Equal(t, []string{"a", "b", "c"}, cfg.HideAngularDeprecation)
}) })
} }