Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
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 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
	}

	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
}