func findAuthOpts(c *cli.Context, have map[string]commandoptions.Cred, want map[string]string) error { // use command-line options if available commandoptions.CLIopts(c, have, want) // are there any unset auth variables? if len(want) != 0 { // if so, look in config file err := commandoptions.ConfigFile(c, have, want) if err != nil { return err } // still unset auth variables? if len(want) != 0 { // if so, look in environment variables envvars(have, want) } } return nil }
func (ctx *Context) handleGlobalOptions() error { defaultSection, err := commandoptions.ProfileSection("") if err != nil { return err } defaultKeysHash := map[string]string{} if defaultSection != nil { defaultKeysHash = defaultSection.KeysHash() } have := make(map[string]commandoptions.Cred) want := map[string]string{ "output": "", "no-cache": "", "no-header": "", "log": "", "use-service-net": "", } // use command-line options if available commandoptions.CLIopts(ctx.CLIContext, have, want) // are there any unset auth variables? if len(want) != 0 { // if so, look in config file err := commandoptions.ConfigFile(ctx.CLIContext, have, want) if err != nil { return err } } var outputFormat string if ctx.CLIContext.IsSet("output") { outputFormat = ctx.CLIContext.String("output") } else if value, ok := defaultKeysHash["output"]; ok && value != "" { outputFormat = value } else { have["output"] = commandoptions.Cred{ Value: "table", From: "default value", } outputFormat = "table" } switch outputFormat { case "json", "csv", "table": ctx.GlobalOptions.output = outputFormat default: return fmt.Errorf("Invalid value for `output` flag: '%s'. Options are: json, csv, table.", outputFormat) } if ctx.CLIContext.IsSet("no-header") { ctx.GlobalOptions.noHeader = true } else if value, ok := defaultKeysHash["no-header"]; ok && value != "" { ctx.GlobalOptions.noHeader = true } if ctx.CLIContext.IsSet("no-cache") { ctx.GlobalOptions.noCache = true } else if value, ok := defaultKeysHash["no-cache"]; ok && value != "" { ctx.GlobalOptions.noCache = true } if ctx.CLIContext.IsSet("use-service-net") { ctx.GlobalOptions.useServiceNet = true } else if value, ok := defaultKeysHash["use-service-net"]; ok && value != "" { ctx.GlobalOptions.useServiceNet = true } var logLevel string if ctx.CLIContext.IsSet("log") { logLevel = ctx.CLIContext.String("log") } else if value, ok := defaultKeysHash["log"]; ok && value != "" { logLevel = value } var level logrus.Level if logLevel != "" { switch strings.ToLower(logLevel) { case "debug": level = logrus.DebugLevel case "info": level = logrus.InfoLevel default: return fmt.Errorf("Invalid value for `log` flag: %s. Valid options are: debug, info", logLevel) } } ctx.logger = &logrus.Logger{ Out: ctx.CLIContext.App.Writer, Formatter: &logrus.TextFormatter{}, Level: level, } haveString := "" for k, v := range have { haveString += fmt.Sprintf("%s: %s (from %s)\n", k, v.Value, v.From) } ctx.logger.Infof("Global Options:\n%s\n", haveString) return nil }