diff --git a/cmd/globals.go b/cmd/globals.go index 37b1830f6..637574434 100644 --- a/cmd/globals.go +++ b/cmd/globals.go @@ -53,11 +53,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. diff --git a/cmd/main.go b/cmd/main.go index d76e084f3..509363c61 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -148,70 +148,84 @@ func checkMainSyntax(c *cli.Context) { } } +// 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 == "" { + fatalIf(errors.New("Config directory is empty"), "Unable to get config file.") + } + // Set global quiet flag. + globalQuiet = c.Bool("quiet") || c.GlobalBool("quiet") +} + +// 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 + } + if updateMsg.Update { + console.Println(updateMsg) + } + } +} + +// 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() + + // Initialize config. + configCreated, err := initConfig() + fatalIf(err, "Unable to initialize minio config.") + if configCreated { + console.Println("Created minio configuration file at " + mustGetConfigPath()) + } + + // 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. + enableLoggers() + + // Init the error tracing module. + initError() +} + // 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.") - } - // Sets new config directory. - setGlobalConfigPath(configDir) - // Valid input arguments to main. checkMainSyntax(c) - // Migrate any old version of config / state files to newer format. - migrate() - - // Initialize config. - configCreated, err := initConfig() - fatalIf(err, "Unable to initialize minio config.") - if configCreated { - console.Println("Created minio configuration file at " + mustGetConfigPath()) - } - - // 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. - enableLoggers() - - // 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) - } - } - } return nil } diff --git a/cmd/server-main.go b/cmd/server-main.go index 58e671ffc..1310f6729 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) + + checkUpdate() + + // Generic initialization + minioInit() // Server address. serverAddr := c.String("address") diff --git a/cmd/update-main.go b/cmd/update-main.go index b96aa825c..d203c1d90 100644 --- a/cmd/update-main.go +++ b/cmd/update-main.go @@ -265,8 +265,9 @@ 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") { + + setGlobalsFromContext(ctx) + if globalQuiet { return } diff --git a/cmd/version-main.go b/cmd/version-main.go index 1d621a8fd..640decea9 100644 --- a/cmd/version-main.go +++ b/cmd/version-main.go @@ -44,6 +44,10 @@ func mainVersion(ctx *cli.Context) { cli.ShowCommandHelpAndExit(ctx, "version", 1) } + setGlobalsFromContext(ctx) + + checkUpdate() + console.Println("Version: " + Version) console.Println("Release-Tag: " + ReleaseTag) console.Println("Commit-ID: " + CommitID)