|
|
|
@ -2,10 +2,12 @@ package manager |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"context" |
|
|
|
|
"fmt" |
|
|
|
|
"path/filepath" |
|
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/plugins" |
|
|
|
|
"github.com/grafana/grafana/pkg/plugins/backendplugin" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func (m *PluginManager) Plugin(_ context.Context, pluginID string) (plugins.PluginDTO, bool) { |
|
|
|
@ -38,13 +40,9 @@ func (m *PluginManager) Plugins(_ context.Context, pluginTypes ...plugins.Type) |
|
|
|
|
return pluginsList |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (m *PluginManager) Add(ctx context.Context, pluginID, version string, opts plugins.AddOpts) error { |
|
|
|
|
func (m *PluginManager) Add(ctx context.Context, pluginID, version string) error { |
|
|
|
|
var pluginZipURL string |
|
|
|
|
|
|
|
|
|
if opts.PluginRepoURL == "" { |
|
|
|
|
opts.PluginRepoURL = grafanaComURL |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if plugin, exists := m.plugin(pluginID); exists { |
|
|
|
|
if !plugin.IsExternalPlugin() { |
|
|
|
|
return plugins.ErrInstallCorePlugin |
|
|
|
@ -58,7 +56,7 @@ func (m *PluginManager) Add(ctx context.Context, pluginID, version string, opts |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// get plugin update information to confirm if upgrading is possible
|
|
|
|
|
updateInfo, err := m.pluginInstaller.GetUpdateInfo(ctx, pluginID, version, opts.PluginRepoURL) |
|
|
|
|
updateInfo, err := m.pluginInstaller.GetUpdateInfo(ctx, pluginID, version, grafanaComURL) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
@ -72,24 +70,38 @@ func (m *PluginManager) Add(ctx context.Context, pluginID, version string, opts |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if opts.PluginInstallDir == "" { |
|
|
|
|
opts.PluginInstallDir = m.cfg.PluginsPath |
|
|
|
|
err := m.pluginInstaller.Install(ctx, pluginID, version, m.cfg.PluginsPath, pluginZipURL, grafanaComURL) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err = m.loadPlugins(m.cfg.PluginsPath) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if opts.PluginZipURL == "" { |
|
|
|
|
opts.PluginZipURL = pluginZipURL |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (m *PluginManager) AddWithFactory(_ context.Context, pluginID string, factory backendplugin.PluginFactoryFunc, |
|
|
|
|
pathResolver plugins.PluginPathResolver) error { |
|
|
|
|
if m.isRegistered(pluginID) { |
|
|
|
|
return fmt.Errorf("plugin %s is already registered", pluginID) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err := m.pluginInstaller.Install(ctx, pluginID, version, opts.PluginInstallDir, opts.PluginZipURL, opts.PluginRepoURL) |
|
|
|
|
path, err := pathResolver() |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
err = m.loadPlugins(opts.PluginInstallDir) |
|
|
|
|
p, err := m.pluginLoader.LoadWithFactory(path, factory) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
err = m.register(p) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|