Plugins: Add preinstall_sync config - allow plugins to be preinstalled synchronously (#105292)
* feat: preinstall_sync config - process and installation logic * ref: add preinstall_sync list to preinstalled plugins of frontendsettings * fix: conf blank line for sections * ref: remove plugins async flag, and rename PreinstallPlugins * docs: default installed plugin list
This commit is contained in:
@@ -41,6 +41,24 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func (cfg *Cfg) processPreinstallPlugins(rawInstallPlugins []string, preinstallPlugins map[string]InstallPlugin) {
|
||||
// Add the plugins defined in the configuration
|
||||
for _, plugin := range rawInstallPlugins {
|
||||
parts := strings.Split(plugin, "@")
|
||||
id := parts[0]
|
||||
version := ""
|
||||
url := ""
|
||||
if len(parts) > 1 {
|
||||
version = parts[1]
|
||||
if len(parts) > 2 {
|
||||
url = parts[2]
|
||||
}
|
||||
}
|
||||
|
||||
preinstallPlugins[id] = InstallPlugin{id, version, url}
|
||||
}
|
||||
}
|
||||
|
||||
func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error {
|
||||
pluginsSection := iniFile.Section("plugins")
|
||||
|
||||
@@ -56,38 +74,41 @@ func (cfg *Cfg) readPluginSettings(iniFile *ini.File) error {
|
||||
cfg.ForwardHostEnvVars = util.SplitString(pluginsSection.Key("forward_host_env_vars").MustString(""))
|
||||
disablePreinstall := pluginsSection.Key("preinstall_disabled").MustBool(false)
|
||||
if !disablePreinstall {
|
||||
rawInstallPlugins := util.SplitString(pluginsSection.Key("preinstall").MustString(""))
|
||||
preinstallPlugins := make(map[string]InstallPlugin)
|
||||
// Add the default preinstalled plugins
|
||||
rawInstallPluginsAsync := util.SplitString(pluginsSection.Key("preinstall").MustString(""))
|
||||
preinstallPluginsAsync := make(map[string]InstallPlugin)
|
||||
// Add the default preinstalled plugins to pre install plugins async list
|
||||
for _, plugin := range defaultPreinstallPlugins {
|
||||
preinstallPlugins[plugin.ID] = plugin
|
||||
preinstallPluginsAsync[plugin.ID] = plugin
|
||||
}
|
||||
if cfg.IsFeatureToggleEnabled("grafanaAdvisor") { // Use literal string to avoid circular dependency
|
||||
preinstallPlugins["grafana-advisor-app"] = InstallPlugin{"grafana-advisor-app", "", ""}
|
||||
preinstallPluginsAsync["grafana-advisor-app"] = InstallPlugin{"grafana-advisor-app", "", ""}
|
||||
}
|
||||
// Add the plugins defined in the configuration
|
||||
for _, plugin := range rawInstallPlugins {
|
||||
parts := strings.Split(plugin, "@")
|
||||
id := parts[0]
|
||||
version := ""
|
||||
url := ""
|
||||
if len(parts) > 1 {
|
||||
version = parts[1]
|
||||
if len(parts) > 2 {
|
||||
url = parts[2]
|
||||
}
|
||||
}
|
||||
cfg.processPreinstallPlugins(rawInstallPluginsAsync, preinstallPluginsAsync)
|
||||
|
||||
preinstallPlugins[id] = InstallPlugin{id, version, url}
|
||||
}
|
||||
rawInstallPluginsSync := util.SplitString(pluginsSection.Key("preinstall_sync").MustString(""))
|
||||
preinstallPluginsSync := make(map[string]InstallPlugin)
|
||||
cfg.processPreinstallPlugins(rawInstallPluginsSync, preinstallPluginsSync)
|
||||
// Remove from the list the plugins that have been disabled
|
||||
for _, disabledPlugin := range cfg.DisablePlugins {
|
||||
delete(preinstallPlugins, disabledPlugin)
|
||||
delete(preinstallPluginsAsync, disabledPlugin)
|
||||
delete(preinstallPluginsSync, disabledPlugin)
|
||||
}
|
||||
for _, plugin := range preinstallPlugins {
|
||||
cfg.PreinstallPlugins = append(cfg.PreinstallPlugins, plugin)
|
||||
for _, plugin := range preinstallPluginsAsync {
|
||||
cfg.PreinstallPluginsAsync = append(cfg.PreinstallPluginsAsync, plugin)
|
||||
}
|
||||
|
||||
for _, plugin := range preinstallPluginsSync {
|
||||
cfg.PreinstallPluginsSync = append(cfg.PreinstallPluginsSync, plugin)
|
||||
}
|
||||
installPluginsInAsync := pluginsSection.Key("preinstall_async").MustBool(true)
|
||||
if !installPluginsInAsync {
|
||||
for key, plugin := range preinstallPluginsAsync {
|
||||
if _, exists := preinstallPluginsSync[key]; !exists {
|
||||
cfg.PreinstallPluginsSync = append(cfg.PreinstallPluginsSync, plugin)
|
||||
}
|
||||
}
|
||||
cfg.PreinstallPluginsAsync = nil
|
||||
}
|
||||
cfg.PreinstallPluginsAsync = pluginsSection.Key("preinstall_async").MustBool(true)
|
||||
}
|
||||
|
||||
cfg.PluginCatalogURL = pluginsSection.Key("plugin_catalog_url").MustString("https://grafana.com/grafana/plugins/")
|
||||
|
||||
Reference in New Issue
Block a user