From 01f625824ab1cc284ff5cc28a01021c24ec050c1 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Mon, 28 Nov 2016 21:15:36 +0100 Subject: [PATCH] args: Honor config-dir & quiet wherever they are (#3356) setGlobalsFromContext() is added to set global variables after parsing command line arguments. Thus, global flags will be honored wherever they are placed in minio command. --- cmd/globals.go | 25 ++++++++-- cmd/main.go | 119 +++++++++++++++++++++----------------------- cmd/server-main.go | 9 +++- cmd/update-main.go | 10 +++- cmd/version-main.go | 10 +++- 5 files changed, 103 insertions(+), 70 deletions(-) diff --git a/cmd/globals.go b/cmd/globals.go index 37b1830f6..2eccb62f3 100644 --- a/cmd/globals.go +++ b/cmd/globals.go @@ -22,6 +22,8 @@ import ( humanize "github.com/dustin/go-humanize" "github.com/fatih/color" + "github.com/minio/cli" + "github.com/minio/mc/pkg/console" "github.com/minio/minio/pkg/objcache" ) @@ -53,11 +55,12 @@ const ( ) var ( - globalQuiet = false // Quiet flag set via command line. - globalIsDistXL = false // "Is Distributed?" flag. - + globalQuiet = false // quiet flag set via command line. + globalConfigDir = mustGetConfigPath() // config-dir flag set via command line // Add new global flags here. + globalIsDistXL = false // "Is Distributed?" flag. + // Maximum cache size. globalMaxCacheSize = uint64(maxCacheSize) // Cache expiry. @@ -90,3 +93,19 @@ var ( colorBlue = color.New(color.FgBlue).SprintfFunc() colorGreen = color.New(color.FgGreen).SprintfFunc() ) + +// Parse command arguments and set global variables accordingly +func setGlobalsFromContext(c *cli.Context) { + // Set config dir + switch { + case c.IsSet("config-dir"): + globalConfigDir = c.String("config-dir") + case c.GlobalIsSet("config-dir"): + globalConfigDir = c.GlobalString("config-dir") + } + if globalConfigDir == "" { + console.Fatalf("Unable to get config file. Config directory is empty.") + } + // Set global quiet flag. + globalQuiet = c.Bool("quiet") || c.GlobalBool("quiet") +} diff --git a/cmd/main.go b/cmd/main.go index fb7017c33..9bd2292e2 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -17,7 +17,6 @@ package cmd import ( - "errors" "fmt" "os" "sort" @@ -148,72 +147,70 @@ func checkMainSyntax(c *cli.Context) { } } -// Main main for minio server. -func Main() { - app := registerApp() - app.Before = func(c *cli.Context) error { - configDir := c.GlobalString("config-dir") - if configDir == "" { - fatalIf(errors.New("Config directory is empty"), "Unable to get config file.") +// Check for updates and print a notification message +func checkUpdate() { + // Do not print update messages, if quiet flag is set. + if !globalQuiet { + updateMsg, _, err := getReleaseUpdate(minioUpdateStableURL, 1*time.Second) + if err != nil { + // Ignore any errors during getReleaseUpdate(), possibly + // because of network errors. + return } - // Sets new config directory. - setGlobalConfigPath(configDir) + if updateMsg.Update { + console.Println(updateMsg) + } + } +} - // Valid input arguments to main. - checkMainSyntax(c) +// Generic Minio initialization to create/load config, prepare loggers, etc.. +func minioInit() { + // Sets new config directory. + setGlobalConfigPath(globalConfigDir) - // Migrate any old version of config / state files to newer format. - migrate() + // Migrate any old version of config / state files to newer format. + migrate() - // Initialize config. - configCreated, err := initConfig() - if err != nil { - console.Fatalf("Unable to initialize minio config. Err: %s.\n", err) - } - if configCreated { - console.Println("Created minio configuration file at " + mustGetConfigPath()) - } + // Initialize config. + configCreated, err := initConfig() + if err != nil { + console.Fatalf("Unable to initialize minio config. Err: %s.\n", err) + } + if configCreated { + console.Println("Created minio configuration file at " + mustGetConfigPath()) + } - // Enable all loggers by now so we can use errorIf() and fatalIf() - enableLoggers() - - // Fetch access keys from environment variables and update the config. - accessKey := os.Getenv("MINIO_ACCESS_KEY") - secretKey := os.Getenv("MINIO_SECRET_KEY") - if accessKey != "" && secretKey != "" { - // Set new credentials. - serverConfig.SetCredential(credential{ - AccessKeyID: accessKey, - SecretAccessKey: secretKey, - }) - } - if !isValidAccessKey(serverConfig.GetCredential().AccessKeyID) { - fatalIf(errInvalidArgument, "Invalid access key. Accept only a string starting with a alphabetic and containing from 5 to 20 characters.") - } - if !isValidSecretKey(serverConfig.GetCredential().SecretAccessKey) { - fatalIf(errInvalidArgument, "Invalid secret key. Accept only a string containing from 8 to 40 characters.") - } + // Enable all loggers by now so we can use errorIf() and fatalIf() + enableLoggers() + + // Fetch access keys from environment variables and update the config. + accessKey := os.Getenv("MINIO_ACCESS_KEY") + secretKey := os.Getenv("MINIO_SECRET_KEY") + if accessKey != "" && secretKey != "" { + // Set new credentials. + serverConfig.SetCredential(credential{ + AccessKeyID: accessKey, + SecretAccessKey: secretKey, + }) + } + if !isValidAccessKey(serverConfig.GetCredential().AccessKeyID) { + fatalIf(errInvalidArgument, "Invalid access key. Accept only a string starting with a alphabetic and containing from 5 to 20 characters.") + } + if !isValidSecretKey(serverConfig.GetCredential().SecretAccessKey) { + fatalIf(errInvalidArgument, "Invalid secret key. Accept only a string containing from 8 to 40 characters.") + } - // Init the error tracing module. - initError() - - // Set global quiet flag. - globalQuiet = c.Bool("quiet") || c.GlobalBool("quiet") - - // Do not print update messages, if quiet flag is set. - if !globalQuiet { - if c.Args().Get(0) != "update" { - updateMsg, _, err := getReleaseUpdate(minioUpdateStableURL, 1*time.Second) - if err != nil { - // Ignore any errors during getReleaseUpdate(), possibly - // because of network errors. - return nil - } - if updateMsg.Update { - console.Println(updateMsg) - } - } - } + // Init the error tracing module. + initError() + +} + +// Main main for minio server. +func Main() { + app := registerApp() + app.Before = func(c *cli.Context) error { + // Valid input arguments to main. + checkMainSyntax(c) return nil } diff --git a/cmd/server-main.go b/cmd/server-main.go index 58e671ffc..f21496036 100644 --- a/cmd/server-main.go +++ b/cmd/server-main.go @@ -363,8 +363,13 @@ func serverMain(c *cli.Context) { cli.ShowCommandHelpAndExit(c, "server", 1) } - // Set global quiet flag. - globalQuiet = c.Bool("quiet") || c.GlobalBool("quiet") + // Set global variables after parsing passed arguments + setGlobalsFromContext(c) + + // Initialization routine, such as config loading, enable logging, .. + minioInit() + + checkUpdate() // Server address. serverAddr := c.String("address") diff --git a/cmd/update-main.go b/cmd/update-main.go index bd63fef2a..e56d9682d 100644 --- a/cmd/update-main.go +++ b/cmd/update-main.go @@ -265,8 +265,14 @@ func getReleaseUpdate(updateURL string, duration time.Duration) (updateMsg updat // main entry point for update command. func mainUpdate(ctx *cli.Context) { - // Set global quiet flag. - if ctx.Bool("quiet") || ctx.GlobalBool("quiet") { + + // Set global variables after parsing passed arguments + setGlobalsFromContext(ctx) + + // Initialization routine, such as config loading, enable logging, .. + minioInit() + + if globalQuiet { return } diff --git a/cmd/version-main.go b/cmd/version-main.go index a4d1f973e..71e34f343 100644 --- a/cmd/version-main.go +++ b/cmd/version-main.go @@ -43,8 +43,14 @@ func mainVersion(ctx *cli.Context) { if len(ctx.Args()) != 0 { cli.ShowCommandHelpAndExit(ctx, "version", 1) } - // Set global quiet flag. - if ctx.Bool("quiet") || ctx.GlobalBool("quiet") { + + // Set global variables after parsing passed arguments + setGlobalsFromContext(ctx) + + // Initialization routine, such as config loading, enable logging, .. + minioInit() + + if globalQuiet { return }