Plugins: Use suffix for plugin directory (#71375)
* plugin dir suffix * fix whitespace * fix cli * fix tests * fixup * simplify * undo uninstall changes
This commit is contained in:
@@ -5,11 +5,11 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/fatih/color"
|
||||
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/services"
|
||||
@@ -73,6 +73,14 @@ func installCommand(c utils.CommandLine) error {
|
||||
// installPlugin downloads the plugin code as a zip file from the Grafana.com API
|
||||
// and then extracts the zip into the plugin's directory.
|
||||
func installPlugin(ctx context.Context, pluginID, version string, c utils.CommandLine) error {
|
||||
// If a version is specified, check if it is already installed
|
||||
if version != "" {
|
||||
if services.PluginVersionInstalled(pluginID, version, c.PluginDirectory()) {
|
||||
services.Logger.Successf("Plugin %s v%s already installed.", pluginID, version)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
repository := repo.NewManager(repo.ManagerCfg{
|
||||
SkipTLSVerify: c.Bool("insecure"),
|
||||
BaseURL: c.PluginRepoURL(),
|
||||
@@ -95,7 +103,7 @@ func installPlugin(ctx context.Context, pluginID, version string, c utils.Comman
|
||||
}
|
||||
|
||||
pluginFs := storage.FileSystem(services.Logger, c.PluginDirectory())
|
||||
extractedArchive, err := pluginFs.Extract(ctx, pluginID, archive.File)
|
||||
extractedArchive, err := pluginFs.Extract(ctx, pluginID, storage.SimpleDirNameGeneratorFunc, archive.File)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -107,7 +115,7 @@ func installPlugin(ctx context.Context, pluginID, version string, c utils.Comman
|
||||
return fmt.Errorf("%v: %w", fmt.Sprintf("failed to download plugin %s from repository", dep.ID), err)
|
||||
}
|
||||
|
||||
_, err = pluginFs.Extract(ctx, dep.ID, d.File)
|
||||
_, err = pluginFs.Extract(ctx, dep.ID, storage.SimpleDirNameGeneratorFunc, d.File)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -117,16 +125,21 @@ func installPlugin(ctx context.Context, pluginID, version string, c utils.Comman
|
||||
|
||||
// uninstallPlugin removes the plugin directory
|
||||
func uninstallPlugin(_ context.Context, pluginID string, c utils.CommandLine) error {
|
||||
logger.Infof("Removing plugin: %v\n", pluginID)
|
||||
|
||||
pluginPath := filepath.Join(c.PluginDirectory(), pluginID)
|
||||
fs := plugins.NewLocalFS(pluginPath)
|
||||
|
||||
logger.Debugf("Removing directory %v\n", pluginPath)
|
||||
err := fs.Remove()
|
||||
if err != nil {
|
||||
return err
|
||||
for _, bundle := range services.GetLocalPlugins(c.PluginDirectory()) {
|
||||
if bundle.Primary.JSONData.ID == pluginID {
|
||||
logger.Infof("Removing plugin: %v\n", pluginID)
|
||||
if remover, ok := bundle.Primary.FS.(plugins.FSRemover); ok {
|
||||
logger.Debugf("Removing directory %v\n\n", bundle.Primary.FS.Base())
|
||||
if err := remover.Remove(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
} else {
|
||||
return fmt.Errorf("plugin %v is immutable and therefore cannot be uninstalled", pluginID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user