upgrade_all_command.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package commands
  2. import (
  3. "github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
  4. m "github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
  5. s "github.com/grafana/grafana/pkg/cmd/grafana-cli/services"
  6. "github.com/grafana/grafana/pkg/cmd/grafana-cli/utils"
  7. "github.com/hashicorp/go-version"
  8. )
  9. func shouldUpgrade(installed string, remote *m.Plugin) bool {
  10. installedVersion, err := version.NewVersion(installed)
  11. if err != nil {
  12. return false
  13. }
  14. latest := latestSupportedVersion(remote)
  15. latestVersion, err := version.NewVersion(latest.Version)
  16. if err != nil {
  17. return false
  18. }
  19. return installedVersion.LessThan(latestVersion)
  20. }
  21. func upgradeAllCommand(c utils.CommandLine) error {
  22. pluginsDir := c.PluginDirectory()
  23. localPlugins := s.GetLocalPlugins(pluginsDir)
  24. remotePlugins, err := c.ApiClient().ListAllPlugins(c.GlobalString("repo"))
  25. if err != nil {
  26. return err
  27. }
  28. pluginsToUpgrade := make([]m.InstalledPlugin, 0)
  29. for _, localPlugin := range localPlugins {
  30. for _, remotePlugin := range remotePlugins.Plugins {
  31. if localPlugin.Id == remotePlugin.Id {
  32. if shouldUpgrade(localPlugin.Info.Version, &remotePlugin) {
  33. pluginsToUpgrade = append(pluginsToUpgrade, localPlugin)
  34. }
  35. }
  36. }
  37. }
  38. for _, p := range pluginsToUpgrade {
  39. logger.Infof("Updating %v \n", p.Id)
  40. err := s.RemoveInstalledPlugin(pluginsDir, p.Id)
  41. if err != nil {
  42. return err
  43. }
  44. err = InstallPlugin(p.Id, "", c)
  45. if err != nil {
  46. return err
  47. }
  48. }
  49. return nil
  50. }