Commit 63f78c0b by Carl Bergquist Committed by GitHub

Merge pull request #9299 from seuf/grafana-cli-plugin-url

Added --pluginUrl option to grafana-cli for local network plugin inst…
parents 632ae098 e978bfc3
...@@ -72,6 +72,11 @@ The Download URL from Grafana.com API is in this form: ...@@ -72,6 +72,11 @@ The Download URL from Grafana.com API is in this form:
`https://grafana.com/api/plugins/<plugin id>/versions/<version number>/download` `https://grafana.com/api/plugins/<plugin id>/versions/<version number>/download`
You can specify a local URL by using the `--pluginUrl` option.
```
grafana-cli --pluginUrl https://nexus.company.com/grafana/plugins/<plugin-id>-<plugin-version>.zip plugins install <plugin-id>
```
To manually install a Plugin via the Grafana.com API: To manually install a Plugin via the Grafana.com API:
1. Find the plugin you want to download, the plugin id can be found on the Installation Tab on the plugin's page on Grafana.com. In this example, the plugin id is `jdbranham-diagram-panel`: 1. Find the plugin you want to download, the plugin id can be found on the Installation Tab on the plugin's page on Grafana.com. In this example, the plugin id is `jdbranham-diagram-panel`:
......
...@@ -19,6 +19,7 @@ type CommandLine interface { ...@@ -19,6 +19,7 @@ type CommandLine interface {
PluginDirectory() string PluginDirectory() string
RepoDirectory() string RepoDirectory() string
PluginURL() string
} }
type contextCommandLine struct { type contextCommandLine struct {
...@@ -44,3 +45,7 @@ func (c *contextCommandLine) PluginDirectory() string { ...@@ -44,3 +45,7 @@ func (c *contextCommandLine) PluginDirectory() string {
func (c *contextCommandLine) RepoDirectory() string { func (c *contextCommandLine) RepoDirectory() string {
return c.GlobalString("repo") return c.GlobalString("repo")
} }
func (c *contextCommandLine) PluginURL() string {
return c.GlobalString("pluginUrl")
}
...@@ -101,3 +101,7 @@ func (fcli *FakeCommandLine) RepoDirectory() string { ...@@ -101,3 +101,7 @@ func (fcli *FakeCommandLine) RepoDirectory() string {
func (fcli *FakeCommandLine) PluginDirectory() string { func (fcli *FakeCommandLine) PluginDirectory() string {
return fcli.GlobalString("pluginsDir") return fcli.GlobalString("pluginsDir")
} }
func (fcli *FakeCommandLine) PluginURL() string {
return fcli.GlobalString("pluginUrl")
}
...@@ -58,37 +58,39 @@ func installCommand(c CommandLine) error { ...@@ -58,37 +58,39 @@ func installCommand(c CommandLine) error {
} }
func InstallPlugin(pluginName, version string, c CommandLine) error { func InstallPlugin(pluginName, version string, c CommandLine) error {
plugin, err := s.GetPlugin(pluginName, c.RepoDirectory())
pluginFolder := c.PluginDirectory() pluginFolder := c.PluginDirectory()
if err != nil { downloadURL := c.PluginURL()
return err if downloadURL == "" {
} plugin, err := s.GetPlugin(pluginName, c.RepoDirectory())
if err != nil {
return err
}
v, err := SelectVersion(plugin, version) v, err := SelectVersion(plugin, version)
if err != nil { if err != nil {
return err return err
} }
if version == "" { if version == "" {
version = v.Version version = v.Version
}
downloadURL = fmt.Sprintf("%s/%s/versions/%s/download",
c.GlobalString("repo"),
pluginName,
version)
} }
downloadURL := fmt.Sprintf("%s/%s/versions/%s/download", logger.Infof("installing %v @ %v\n", pluginName, version)
c.GlobalString("repo"),
pluginName,
version)
logger.Infof("installing %v @ %v\n", plugin.Id, version)
logger.Infof("from url: %v\n", downloadURL) logger.Infof("from url: %v\n", downloadURL)
logger.Infof("into: %v\n", pluginFolder) logger.Infof("into: %v\n", pluginFolder)
logger.Info("\n") logger.Info("\n")
err = downloadFile(plugin.Id, pluginFolder, downloadURL) err := downloadFile(pluginName, pluginFolder, downloadURL)
if err != nil { if err != nil {
return err return err
} }
logger.Infof("%s Installed %s successfully \n", color.GreenString("✔"), plugin.Id) logger.Infof("%s Installed %s successfully \n", color.GreenString("✔"), pluginName)
res, _ := s.ReadPlugin(pluginFolder, pluginName) res, _ := s.ReadPlugin(pluginFolder, pluginName)
for _, v := range res.Dependencies.Plugins { for _, v := range res.Dependencies.Plugins {
......
...@@ -38,6 +38,12 @@ func main() { ...@@ -38,6 +38,12 @@ func main() {
Value: "https://grafana.com/api/plugins", Value: "https://grafana.com/api/plugins",
EnvVar: "GF_PLUGIN_REPO", EnvVar: "GF_PLUGIN_REPO",
}, },
cli.StringFlag{
Name: "pluginUrl",
Usage: "Full url to the plugin zip file instead of downloading the plugin from grafana.com/api",
Value: "",
EnvVar: "GF_PLUGIN_URL",
},
cli.BoolFlag{ cli.BoolFlag{
Name: "debug, d", Name: "debug, d",
Usage: "enable debug logging", Usage: "enable debug logging",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment