Honor global flags irrespective of the position. (#5486)

Flags like `json, config-dir, quiet` are now honored even if they are
between minio and gateway in the cli, like, `minio --json gateway s3`.

Fixes #5403
This commit is contained in:
kannappanr 2018-02-28 20:13:33 -08:00 committed by Dee Koder
parent 6faa1ef11a
commit d32f90fe95
5 changed files with 46 additions and 25 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Minio Cloud Storage, (C) 2017 Minio, Inc. * Minio Cloud Storage, (C) 2017, 2018 Minio, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -51,23 +51,36 @@ func initConfig() {
} }
func handleCommonCmdArgs(ctx *cli.Context) { func handleCommonCmdArgs(ctx *cli.Context) {
// Set configuration directory.
{ var configDir string
// Get configuration directory from command line argument.
configDir := ctx.String("config-dir") if ctx.IsSet("config-dir") {
if !ctx.IsSet("config-dir") && ctx.GlobalIsSet("config-dir") { configDir = ctx.String("config-dir")
configDir = ctx.GlobalString("config-dir") } else if ctx.GlobalIsSet("config-dir") {
configDir = ctx.GlobalString("config-dir")
// cli package does not expose parent's "config-dir" option. Below code is workaround.
if configDir == "" || configDir == getConfigDir() {
if ctx.Parent().GlobalIsSet("config-dir") {
configDir = ctx.Parent().GlobalString("config-dir")
}
} }
} else {
// Neither local nor global config-dir option is provided. In this case, try to use
// default config directory.
configDir = getConfigDir()
if configDir == "" { if configDir == "" {
fatalIf(errors.New("empty directory"), "Configuration directory cannot be empty.") fatalIf(errors.New("missing option"), "config-dir option must be provided.")
} }
// Disallow relative paths, figure out absolute paths.
configDirAbs, err := filepath.Abs(configDir)
fatalIf(err, "Unable to fetch absolute path for config directory %s", configDir)
setConfigDir(configDirAbs)
} }
if configDir == "" {
fatalIf(errors.New("empty directory"), "Configuration directory cannot be empty.")
}
// Disallow relative paths, figure out absolute paths.
configDirAbs, err := filepath.Abs(configDir)
fatalIf(err, "Unable to fetch absolute path for config directory %s", configDir)
setConfigDir(configDirAbs)
} }
func handleCommonEnvVars() { func handleCommonEnvVars() {

View File

@ -1,5 +1,5 @@
/* /*
* Minio Cloud Storage, (C) 2015, 2016, 2017 Minio, Inc. * Minio Cloud Storage, (C) 2015, 2016, 2017, 2018 Minio, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -95,14 +95,16 @@ func (config *ConfigDir) GetPrivateKeyFile() string {
return filepath.Join(config.getCertsDir(), privateKeyFile) return filepath.Join(config.getCertsDir(), privateKeyFile)
} }
func mustGetDefaultConfigDir() string { func getDefaultConfigDir() string {
homeDir, err := homedir.Dir() homeDir, err := homedir.Dir()
fatalIf(err, "Unable to get home directory.") if err != nil {
return ""
}
return filepath.Join(homeDir, defaultMinioConfigDir) return filepath.Join(homeDir, defaultMinioConfigDir)
} }
var configDir = &ConfigDir{dir: mustGetDefaultConfigDir()} var configDir = &ConfigDir{dir: getDefaultConfigDir()}
func setConfigDir(dir string) { func setConfigDir(dir string) {
configDir.Set(dir) configDir.Set(dir)

View File

@ -1,5 +1,5 @@
/* /*
* Minio Cloud Storage, (C) 2017 Minio, Inc. * Minio Cloud Storage, (C) 2017, 2018 Minio, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -114,13 +114,13 @@ func StartGateway(ctx *cli.Context, gw Gateway) {
// Get "json" flag from command line argument and // Get "json" flag from command line argument and
// enable json and quite modes if jason flag is turned on. // enable json and quite modes if jason flag is turned on.
jsonFlag := ctx.Bool("json") || ctx.GlobalBool("json") jsonFlag := ctx.IsSet("json") || ctx.GlobalIsSet("json")
if jsonFlag { if jsonFlag {
log.EnableJSON() log.EnableJSON()
} }
// Get quiet flag from command line argument. // Get quiet flag from command line argument.
quietFlag := ctx.Bool("quiet") || ctx.GlobalBool("quiet") quietFlag := ctx.IsSet("quiet") || ctx.GlobalIsSet("quiet")
if quietFlag { if quietFlag {
log.EnableQuiet() log.EnableQuiet()
} }

View File

@ -1,5 +1,5 @@
/* /*
* Minio Cloud Storage, (C) 2015, 2016, 2017 Minio, Inc. * Minio Cloud Storage, (C) 2015, 2016, 2017, 2018 Minio, Inc.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -32,7 +32,13 @@ var globalFlags = []cli.Flag{
cli.StringFlag{ cli.StringFlag{
Name: "config-dir, C", Name: "config-dir, C",
Value: getConfigDir(), Value: getConfigDir(),
Usage: "Path to configuration directory.", Usage: func() string {
usage := "Path to configuration directory."
if getConfigDir() == "" {
usage = usage + " This option must be set."
}
return usage
}(),
}, },
cli.BoolFlag{ cli.BoolFlag{
Name: "quiet", Name: "quiet",

View File

@ -156,13 +156,13 @@ func serverMain(ctx *cli.Context) {
// Get "json" flag from command line argument and // Get "json" flag from command line argument and
// enable json and quite modes if jason flag is turned on. // enable json and quite modes if jason flag is turned on.
jsonFlag := ctx.Bool("json") || ctx.GlobalBool("json") jsonFlag := ctx.IsSet("json") || ctx.GlobalIsSet("json")
if jsonFlag { if jsonFlag {
log.EnableJSON() log.EnableJSON()
} }
// Get quiet flag from command line argument. // Get quiet flag from command line argument.
quietFlag := ctx.Bool("quiet") || ctx.GlobalBool("quiet") quietFlag := ctx.IsSet("quiet") || ctx.GlobalIsSet("quiet")
if quietFlag { if quietFlag {
log.EnableQuiet() log.EnableQuiet()
} }