mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 17:02:20 +08:00

* feat: pass gcom sso_api_token to repo created from install command * fix * fix: extract gcom section to a func * Update pkg/cmd/grafana-cli/utils/command_line.go Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com> * fix: only set gcom token when the request is to GCOM --------- Co-authored-by: Giuseppe Guerra <giuseppe.guerra@grafana.com>
113 lines
2.8 KiB
Go
113 lines
2.8 KiB
Go
package utils
|
|
|
|
import (
|
|
"slices"
|
|
"strings"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
|
"github.com/grafana/grafana/pkg/cmd/grafana-cli/models"
|
|
"github.com/grafana/grafana/pkg/setting"
|
|
)
|
|
|
|
type CommandLine interface {
|
|
ShowHelp() error
|
|
ShowVersion()
|
|
Application() *cli.App
|
|
Args() cli.Args
|
|
Bool(name string) bool
|
|
Int(name string) int
|
|
String(name string) string
|
|
StringSlice(name string) []string
|
|
FlagNames() (names []string)
|
|
Generic(name string) any
|
|
|
|
PluginDirectory() string
|
|
PluginRepoURL() string
|
|
PluginURL() string
|
|
GcomToken() string
|
|
}
|
|
|
|
type ApiClient interface {
|
|
GetPlugin(pluginId, repoUrl string) (models.Plugin, error)
|
|
ListAllPlugins(repoUrl string) (models.PluginRepo, error)
|
|
}
|
|
|
|
type ContextCommandLine struct {
|
|
*cli.Context
|
|
}
|
|
|
|
func (c *ContextCommandLine) ShowHelp() error {
|
|
return cli.ShowCommandHelp(c.Context, c.Command.Name)
|
|
}
|
|
|
|
func (c *ContextCommandLine) ShowVersion() {
|
|
cli.ShowVersion(c.Context)
|
|
}
|
|
|
|
func (c *ContextCommandLine) Application() *cli.App {
|
|
return c.App
|
|
}
|
|
|
|
func (c *ContextCommandLine) HomePath() string { return c.String("homepath") }
|
|
|
|
func (c *ContextCommandLine) ConfigFile() string { return c.String("config") }
|
|
|
|
func (c *ContextCommandLine) PluginDirectory() string {
|
|
return c.String("pluginsDir")
|
|
}
|
|
|
|
/*
|
|
The plugin repository URL is determined in the following order:
|
|
1. --repo flag value if it is specified
|
|
2. --repo flag value if set via the environment variable called "GF_PLUGIN_REPO"
|
|
3. --configOverrides parameter (only if --config is set too)
|
|
4. --config parameter, from which we are looking at GrafanaComAPIURL setting
|
|
5. fallback to default value which is https://grafana.com/api/plugins
|
|
**/
|
|
|
|
func (c *ContextCommandLine) PluginRepoURL() string {
|
|
// if --repo flag is set, use it
|
|
// since the repo flag always has a value set by default we are checking in the flag lists if the --repo flag was provided at all.
|
|
if slices.Contains(c.FlagNames(), "repo") {
|
|
return c.String("repo")
|
|
}
|
|
|
|
// if --config flag is set, try to get the GrafanaComAPIURL setting
|
|
if c.ConfigFile() != "" {
|
|
cfg, err := c.Config()
|
|
|
|
if err != nil {
|
|
logger.Debug("Could not parse config file", err)
|
|
} else if cfg.GrafanaComAPIURL != "" {
|
|
return cfg.GrafanaComAPIURL + "/plugins"
|
|
}
|
|
}
|
|
// fallback to default value
|
|
return c.String("repo")
|
|
}
|
|
|
|
func (c *ContextCommandLine) Config() (*setting.Cfg, error) {
|
|
configOptions := strings.Split(c.String("configOverrides"), " ")
|
|
return setting.NewCfgFromArgs(setting.CommandLineArgs{
|
|
Config: c.ConfigFile(),
|
|
HomePath: c.HomePath(),
|
|
Args: append(configOptions, c.Args().Slice()...),
|
|
})
|
|
}
|
|
|
|
func (c *ContextCommandLine) GcomToken() string {
|
|
cfg, err := c.Config()
|
|
|
|
if err != nil {
|
|
logger.Debug("Could not parse config file", err)
|
|
return ""
|
|
}
|
|
return cfg.GrafanaComSSOAPIToken
|
|
}
|
|
|
|
func (c *ContextCommandLine) PluginURL() string {
|
|
return c.String("pluginUrl")
|
|
}
|