Plugins: Tidy up CLI code (#67723)

* remove dead code and use pkg/plugins for uninstall process

* fix linter

* remove unnecessary cruft
This commit is contained in:
Will Browne 2023-05-04 10:52:09 +02:00 committed by GitHub
parent 3644ea6556
commit fd28c8490f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 25 additions and 74 deletions

View File

@ -10,7 +10,6 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/commands/datamigrations"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/commands/secretsmigrations"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/services"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/tracing"
@ -91,47 +90,38 @@ func runPluginCommand(command func(commandLine utils.CommandLine) error) func(co
}
}
// Command contains command state.
type Command struct {
Client utils.ApiClient
}
var cmd Command = Command{
Client: &services.GrafanaComClient{},
}
var pluginCommands = []*cli.Command{
{
Name: "install",
Usage: "install <plugin id> <plugin version (optional)>",
Action: runPluginCommand(cmd.installCommand),
Action: runPluginCommand(installCommand),
}, {
Name: "list-remote",
Usage: "list remote available plugins",
Action: runPluginCommand(cmd.listRemoteCommand),
Action: runPluginCommand(listRemoteCommand),
}, {
Name: "list-versions",
Usage: "list-versions <plugin id>",
Action: runPluginCommand(cmd.listVersionsCommand),
Action: runPluginCommand(listVersionsCommand),
}, {
Name: "update",
Usage: "update <plugin id>",
Aliases: []string{"upgrade"},
Action: runPluginCommand(cmd.upgradeCommand),
Action: runPluginCommand(upgradeCommand),
}, {
Name: "update-all",
Aliases: []string{"upgrade-all"},
Usage: "update all your installed plugins",
Action: runPluginCommand(cmd.upgradeAllCommand),
Action: runPluginCommand(upgradeAllCommand),
}, {
Name: "ls",
Usage: "list installed plugins (excludes core plugins)",
Action: runPluginCommand(cmd.lsCommand),
Action: runPluginCommand(lsCommand),
}, {
Name: "uninstall",
Aliases: []string{"remove"},
Usage: "uninstall <plugin id>",
Action: runPluginCommand(cmd.removeCommand),
Action: runPluginCommand(removeCommand),
},
}

View File

@ -1,36 +0,0 @@
package commandstest
import (
"os"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
)
type FakeGrafanaComClient struct {
GetPluginFunc func(pluginId, repoUrl string) (models.Plugin, error)
DownloadFileFunc func(pluginName string, tmpFile *os.File, url string, checksum string) (err error)
ListAllPluginsFunc func(repoUrl string) (models.PluginRepo, error)
}
func (client *FakeGrafanaComClient) GetPlugin(pluginID, repoUrl string) (models.Plugin, error) {
if client.GetPluginFunc != nil {
return client.GetPluginFunc(pluginID, repoUrl)
}
return models.Plugin{}, nil
}
func (client *FakeGrafanaComClient) DownloadFile(pluginName string, tmpFile *os.File, url string, checksum string) (err error) {
if client.DownloadFileFunc != nil {
return client.DownloadFileFunc(pluginName, tmpFile, url, checksum)
}
return nil
}
func (client *FakeGrafanaComClient) ListAllPlugins(repoURL string) (models.PluginRepo, error) {
if client.ListAllPluginsFunc != nil {
return client.ListAllPluginsFunc(repoURL)
}
return models.PluginRepo{}, nil
}

View File

@ -49,7 +49,7 @@ func logRestartNotice() {
logger.Info(color.GreenString("Please restart Grafana after installing or removing plugins. Refer to Grafana documentation for instructions if necessary.\n\n"))
}
func (cmd Command) installCommand(c utils.CommandLine) error {
func installCommand(c utils.CommandLine) error {
pluginFolder := c.PluginDirectory()
if err := validateInput(c, pluginFolder); err != nil {
return err

View File

@ -2,13 +2,14 @@ package commands
import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/services"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
)
// listRemoteCommand prints out all plugins in the remote repo with latest version supported on current platform.
// If there are no supported versions for plugin it is skipped.
func (cmd Command) listRemoteCommand(c utils.CommandLine) error {
plugin, err := cmd.Client.ListAllPlugins(c.PluginRepoURL())
func listRemoteCommand(c utils.CommandLine) error {
plugin, err := services.ListAllPlugins(c.PluginRepoURL())
if err != nil {
return err
}

View File

@ -4,6 +4,7 @@ import (
"errors"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/services"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
)
@ -16,14 +17,14 @@ func validateVersionInput(c utils.CommandLine) error {
return nil
}
func (cmd Command) listVersionsCommand(c utils.CommandLine) error {
func listVersionsCommand(c utils.CommandLine) error {
if err := validateVersionInput(c); err != nil {
return err
}
pluginToList := c.Args().First()
plugin, err := cmd.Client.GetPlugin(pluginToList, c.String("repo"))
plugin, err := services.GetPlugin(pluginToList, c.String("repo"))
if err != nil {
return err
}

View File

@ -35,7 +35,7 @@ var validateLsCommand = func(pluginDir string) error {
return nil
}
func (cmd Command) lsCommand(c utils.CommandLine) error {
func lsCommand(c utils.CommandLine) error {
pluginDir := c.PluginDirectory()
if err := validateLsCommand(pluginDir); err != nil {
return err

View File

@ -43,8 +43,7 @@ func TestMissingPath(t *testing.T) {
c, err := commandstest.NewCliContext(tc.cliContext)
require.NoError(t, err)
cmd := Command{}
err = cmd.lsCommand(c)
err = lsCommand(c)
assert.Equal(t, tc.error, err)
})
}
@ -66,8 +65,7 @@ func TestValidateLsCommand_override(t *testing.T) {
return expected
}
cmd := Command{}
err = cmd.lsCommand(c)
err = lsCommand(c)
assert.Error(t, err)
assert.Equal(t, expected, err, "can override validateLsCommand")
})
@ -77,8 +75,7 @@ func TestValidateLsCommand_override(t *testing.T) {
c, err := commandstest.NewCliContext(map[string]string{"path": "/var/lib/grafana/plugins"})
require.NoError(t, err)
cmd := Command{}
err = cmd.lsCommand(c)
err = lsCommand(c)
assert.NotEqual(t, err, expected, "validateLsCommand is reset")
})
}

View File

@ -9,7 +9,7 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
)
func (cmd Command) removeCommand(c utils.CommandLine) error {
func removeCommand(c utils.CommandLine) error {
pluginID := c.Args().First()
if pluginID == "" {
return errors.New("missing plugin parameter")

View File

@ -25,12 +25,12 @@ func shouldUpgrade(installed string, remote *models.Plugin) bool {
return installedVersion.LessThan(latestVersion)
}
func (cmd Command) upgradeAllCommand(c utils.CommandLine) error {
func upgradeAllCommand(c utils.CommandLine) error {
pluginsDir := c.PluginDirectory()
localPlugins := services.GetLocalPlugins(pluginsDir)
remotePlugins, err := cmd.Client.ListAllPlugins(c.String("repo"))
remotePlugins, err := services.ListAllPlugins(c.String("repo"))
if err != nil {
return err
}

View File

@ -11,7 +11,7 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
)
func (cmd Command) upgradeCommand(c utils.CommandLine) error {
func upgradeCommand(c utils.CommandLine) error {
ctx := context.Background()
pluginsDir := c.PluginDirectory()
pluginID := c.Args().First()
@ -21,7 +21,7 @@ func (cmd Command) upgradeCommand(c utils.CommandLine) error {
return err
}
plugin, err := cmd.Client.GetPlugin(pluginID, c.PluginRepoURL())
plugin, err := services.GetPlugin(pluginID, c.PluginRepoURL())
if err != nil {
return err
}

View File

@ -14,9 +14,7 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
)
type GrafanaComClient struct{}
func (client *GrafanaComClient) GetPlugin(pluginId, repoUrl string) (models.Plugin, error) {
func GetPlugin(pluginId, repoUrl string) (models.Plugin, error) {
logger.Debugf("getting plugin metadata from: %v pluginId: %v \n", repoUrl, pluginId)
body, err := sendRequestGetBytes(HttpClient, repoUrl, "repo", pluginId)
if err != nil {
@ -37,7 +35,7 @@ func (client *GrafanaComClient) GetPlugin(pluginId, repoUrl string) (models.Plug
return data, nil
}
func (client *GrafanaComClient) ListAllPlugins(repoUrl string) (models.PluginRepo, error) {
func ListAllPlugins(repoUrl string) (models.PluginRepo, error) {
body, err := sendRequestGetBytes(HttpClient, repoUrl, "repo")
if err != nil {