Plugins: Tidy up CLI code (#67723)

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

* fix linter

* remove unnecessary cruft
pull/67812/head
Will Browne 3 years ago committed by GitHub
parent 3644ea6556
commit fd28c8490f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      pkg/cmd/grafana-cli/commands/commands.go
  2. 36
      pkg/cmd/grafana-cli/commands/commandstest/fake_api_client.go
  3. 2
      pkg/cmd/grafana-cli/commands/install_command.go
  4. 5
      pkg/cmd/grafana-cli/commands/listremote_command.go
  5. 5
      pkg/cmd/grafana-cli/commands/listversions_command.go
  6. 2
      pkg/cmd/grafana-cli/commands/ls_command.go
  7. 9
      pkg/cmd/grafana-cli/commands/ls_command_test.go
  8. 2
      pkg/cmd/grafana-cli/commands/remove_command.go
  9. 4
      pkg/cmd/grafana-cli/commands/upgrade_all_command.go
  10. 4
      pkg/cmd/grafana-cli/commands/upgrade_command.go
  11. 6
      pkg/cmd/grafana-cli/services/api_client.go

@ -10,7 +10,6 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/commands/datamigrations" "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/commands/secretsmigrations"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger" "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/cmd/grafana-cli/utils"
"github.com/grafana/grafana/pkg/infra/db" "github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/tracing" "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{ var pluginCommands = []*cli.Command{
{ {
Name: "install", Name: "install",
Usage: "install <plugin id> <plugin version (optional)>", Usage: "install <plugin id> <plugin version (optional)>",
Action: runPluginCommand(cmd.installCommand), Action: runPluginCommand(installCommand),
}, { }, {
Name: "list-remote", Name: "list-remote",
Usage: "list remote available plugins", Usage: "list remote available plugins",
Action: runPluginCommand(cmd.listRemoteCommand), Action: runPluginCommand(listRemoteCommand),
}, { }, {
Name: "list-versions", Name: "list-versions",
Usage: "list-versions <plugin id>", Usage: "list-versions <plugin id>",
Action: runPluginCommand(cmd.listVersionsCommand), Action: runPluginCommand(listVersionsCommand),
}, { }, {
Name: "update", Name: "update",
Usage: "update <plugin id>", Usage: "update <plugin id>",
Aliases: []string{"upgrade"}, Aliases: []string{"upgrade"},
Action: runPluginCommand(cmd.upgradeCommand), Action: runPluginCommand(upgradeCommand),
}, { }, {
Name: "update-all", Name: "update-all",
Aliases: []string{"upgrade-all"}, Aliases: []string{"upgrade-all"},
Usage: "update all your installed plugins", Usage: "update all your installed plugins",
Action: runPluginCommand(cmd.upgradeAllCommand), Action: runPluginCommand(upgradeAllCommand),
}, { }, {
Name: "ls", Name: "ls",
Usage: "list installed plugins (excludes core plugins)", Usage: "list installed plugins (excludes core plugins)",
Action: runPluginCommand(cmd.lsCommand), Action: runPluginCommand(lsCommand),
}, { }, {
Name: "uninstall", Name: "uninstall",
Aliases: []string{"remove"}, Aliases: []string{"remove"},
Usage: "uninstall <plugin id>", Usage: "uninstall <plugin id>",
Action: runPluginCommand(cmd.removeCommand), Action: runPluginCommand(removeCommand),
}, },
} }

@ -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
}

@ -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")) 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() pluginFolder := c.PluginDirectory()
if err := validateInput(c, pluginFolder); err != nil { if err := validateInput(c, pluginFolder); err != nil {
return err return err

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

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

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

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

@ -9,7 +9,7 @@ import (
"github.com/grafana/grafana/pkg/cmd/grafana-cli/utils" "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() pluginID := c.Args().First()
if pluginID == "" { if pluginID == "" {
return errors.New("missing plugin parameter") return errors.New("missing plugin parameter")

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

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

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

Loading…
Cancel
Save