parent
e8892a9f3c
commit
56003fded7
@ -1,127 +0,0 @@ |
|||||||
/* |
|
||||||
* Minio Cloud Storage, (C) 2015 Minio, Inc. |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
package main |
|
||||||
|
|
||||||
import ( |
|
||||||
"os" |
|
||||||
"os/user" |
|
||||||
"path/filepath" |
|
||||||
|
|
||||||
"github.com/minio/minio-xl/pkg/probe" |
|
||||||
"github.com/minio/minio-xl/pkg/quick" |
|
||||||
) |
|
||||||
|
|
||||||
// AuthConfig auth keys
|
|
||||||
type AuthConfig struct { |
|
||||||
Version string `json:"version"` |
|
||||||
AccessKeyID string `json:"accessKeyId"` |
|
||||||
SecretAccessKey string `json:"secretAccessKey"` |
|
||||||
} |
|
||||||
|
|
||||||
// getAuthConfigPath get users config path
|
|
||||||
func getAuthConfigPath() (string, *probe.Error) { |
|
||||||
if customConfigPath != "" { |
|
||||||
return customConfigPath, nil |
|
||||||
} |
|
||||||
u, err := user.Current() |
|
||||||
if err != nil { |
|
||||||
return "", probe.NewError(err) |
|
||||||
} |
|
||||||
authConfigPath := filepath.Join(u.HomeDir, ".minio") |
|
||||||
return authConfigPath, nil |
|
||||||
} |
|
||||||
|
|
||||||
// createAuthConfigPath create users config path
|
|
||||||
func createAuthConfigPath() *probe.Error { |
|
||||||
authConfigPath, err := getAuthConfigPath() |
|
||||||
if err != nil { |
|
||||||
return err.Trace() |
|
||||||
} |
|
||||||
if err := os.MkdirAll(authConfigPath, 0700); err != nil { |
|
||||||
return probe.NewError(err) |
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
|
|
||||||
// isAuthConfigFileExists is auth config file exists?
|
|
||||||
func isAuthConfigFileExists() bool { |
|
||||||
if _, err := os.Stat(mustGetAuthConfigFile()); err != nil { |
|
||||||
if os.IsNotExist(err) { |
|
||||||
return false |
|
||||||
} |
|
||||||
panic(err) |
|
||||||
} |
|
||||||
return true |
|
||||||
} |
|
||||||
|
|
||||||
// mustGetAuthConfigFile always get users config file, if not panic
|
|
||||||
func mustGetAuthConfigFile() string { |
|
||||||
authConfigFile, err := getAuthConfigFile() |
|
||||||
if err != nil { |
|
||||||
panic(err) |
|
||||||
} |
|
||||||
return authConfigFile |
|
||||||
} |
|
||||||
|
|
||||||
// getAuthConfigFile get users config file
|
|
||||||
func getAuthConfigFile() (string, *probe.Error) { |
|
||||||
authConfigPath, err := getAuthConfigPath() |
|
||||||
if err != nil { |
|
||||||
return "", err.Trace() |
|
||||||
} |
|
||||||
return filepath.Join(authConfigPath, "fsUsers.json"), nil |
|
||||||
} |
|
||||||
|
|
||||||
// customConfigPath for custom config path only for testing purposes
|
|
||||||
var customConfigPath string |
|
||||||
|
|
||||||
// saveAuthConfig save auth config
|
|
||||||
func saveAuthConfig(a *AuthConfig) *probe.Error { |
|
||||||
authConfigFile, err := getAuthConfigFile() |
|
||||||
if err != nil { |
|
||||||
return err.Trace() |
|
||||||
} |
|
||||||
qc, err := quick.New(a) |
|
||||||
if err != nil { |
|
||||||
return err.Trace() |
|
||||||
} |
|
||||||
if err := qc.Save(authConfigFile); err != nil { |
|
||||||
return err.Trace() |
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
|
|
||||||
// loadAuthConfig load auth config
|
|
||||||
func loadAuthConfig() (*AuthConfig, *probe.Error) { |
|
||||||
authConfigFile, err := getAuthConfigFile() |
|
||||||
if err != nil { |
|
||||||
return nil, err.Trace() |
|
||||||
} |
|
||||||
if _, err := os.Stat(authConfigFile); err != nil { |
|
||||||
return nil, probe.NewError(err) |
|
||||||
} |
|
||||||
a := &AuthConfig{} |
|
||||||
a.Version = "1" |
|
||||||
qc, err := quick.New(a) |
|
||||||
if err != nil { |
|
||||||
return nil, err.Trace() |
|
||||||
} |
|
||||||
if err := qc.Load(authConfigFile); err != nil { |
|
||||||
return nil, err.Trace() |
|
||||||
} |
|
||||||
return qc.Data().(*AuthConfig), nil |
|
||||||
} |
|
@ -0,0 +1,78 @@ |
|||||||
|
/* |
||||||
|
* Minio Cloud Storage, (C) 2015 Minio, Inc. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import "github.com/minio/cli" |
||||||
|
|
||||||
|
// Configure logger
|
||||||
|
var configLoggerCmd = cli.Command{ |
||||||
|
Name: "logger", |
||||||
|
Usage: "Configure logger.", |
||||||
|
Action: mainConfigLogger, |
||||||
|
CustomHelpTemplate: `NAME: |
||||||
|
minio config {{.Name}} - {{.Usage}} |
||||||
|
|
||||||
|
USAGE: |
||||||
|
minio config {{.Name}} |
||||||
|
|
||||||
|
`, |
||||||
|
} |
||||||
|
|
||||||
|
func mainConfigLogger(ctx *cli.Context) { |
||||||
|
if !ctx.Args().Present() || ctx.Args().First() == "help" { |
||||||
|
cli.ShowCommandHelpAndExit(ctx, "logger", 1) // last argument is exit code
|
||||||
|
} |
||||||
|
if ctx.Args().Get(0) == "mongo" { |
||||||
|
enableLog2Mongo(ctx.Args().Tail()) |
||||||
|
} |
||||||
|
if ctx.Args().Get(0) == "syslog" { |
||||||
|
enableLog2Syslog(ctx.Args().Tail()) |
||||||
|
} |
||||||
|
if ctx.Args().Get(0) == "file" { |
||||||
|
enableLog2File(ctx.Args().Tail()) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func enableLog2Mongo(args cli.Args) { |
||||||
|
config, err := loadConfigV2() |
||||||
|
fatalIf(err.Trace(), "Unable to load config", nil) |
||||||
|
|
||||||
|
config.MongoLogger.Addr = args.Get(0) |
||||||
|
config.MongoLogger.DB = args.Get(1) |
||||||
|
config.MongoLogger.Collection = args.Get(2) |
||||||
|
|
||||||
|
err = saveConfig(config) |
||||||
|
fatalIf(err.Trace(), "Unable to save config.", nil) |
||||||
|
} |
||||||
|
|
||||||
|
func enableLog2Syslog(args cli.Args) { |
||||||
|
config, err := loadConfigV2() |
||||||
|
fatalIf(err.Trace(), "Unable to load config.", nil) |
||||||
|
|
||||||
|
config.SyslogLogger.Addr = args.Get(0) |
||||||
|
config.SyslogLogger.Network = args.Get(1) |
||||||
|
err = saveConfig(config) |
||||||
|
fatalIf(err.Trace(), "Unable to save config.", nil) |
||||||
|
} |
||||||
|
|
||||||
|
func enableLog2File(args cli.Args) { |
||||||
|
config, err := loadConfigV2() |
||||||
|
fatalIf(err.Trace(), "Unable to load config.", nil) |
||||||
|
config.FileLogger.Filename = args.Get(0) |
||||||
|
err = saveConfig(config) |
||||||
|
fatalIf(err.Trace(), "Unable to save config.", nil) |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
/* |
||||||
|
* Minio Cloud Storage, (C) 2015 Minio, Inc. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import "github.com/minio/cli" |
||||||
|
|
||||||
|
// Configure minio server
|
||||||
|
//
|
||||||
|
// ----
|
||||||
|
// NOTE: that the configure command only writes values to the config file.
|
||||||
|
// It does not use any configuration values from the environment variables.
|
||||||
|
// ----
|
||||||
|
//
|
||||||
|
var configCmd = cli.Command{ |
||||||
|
Name: "config", |
||||||
|
Usage: "Collection of config management commands.", |
||||||
|
Action: mainConfig, |
||||||
|
Subcommands: []cli.Command{ |
||||||
|
configLoggerCmd, |
||||||
|
configVersionCmd, |
||||||
|
}, |
||||||
|
CustomHelpTemplate: `NAME: |
||||||
|
{{.Name}} - {{.Usage}} |
||||||
|
|
||||||
|
USAGE: |
||||||
|
{{.Name}} {{if .Flags}}[global flags] {{end}}command{{if .Flags}} [command flags]{{end}} [arguments...] |
||||||
|
|
||||||
|
COMMANDS: |
||||||
|
{{range .Commands}}{{ .Name }}{{ "\t" }}{{.Usage}} |
||||||
|
{{end}} |
||||||
|
`, |
||||||
|
} |
||||||
|
|
||||||
|
// mainConfig is the handle for "minio config" command. provides sub-commands which write configuration data in json format to config file.
|
||||||
|
func mainConfig(ctx *cli.Context) { |
||||||
|
if !ctx.Args().Present() || ctx.Args().First() == "help" { |
||||||
|
cli.ShowAppHelp(ctx) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,64 @@ |
|||||||
|
/* |
||||||
|
* Minio Cloud Storage, (C) 2015 Minio, Inc. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/json" |
||||||
|
|
||||||
|
"github.com/minio/cli" |
||||||
|
"github.com/minio/minio-xl/pkg/probe" |
||||||
|
) |
||||||
|
|
||||||
|
// Print config version.
|
||||||
|
var configVersionCmd = cli.Command{ |
||||||
|
Name: "version", |
||||||
|
Usage: "Print config version.", |
||||||
|
Action: mainConfigVersion, |
||||||
|
CustomHelpTemplate: `NAME: |
||||||
|
minio config {{.Name}} - {{.Usage}} |
||||||
|
|
||||||
|
USAGE: |
||||||
|
minio config {{.Name}} |
||||||
|
|
||||||
|
`, |
||||||
|
} |
||||||
|
|
||||||
|
func mainConfigVersion(ctx *cli.Context) { |
||||||
|
if ctx.Args().First() == "help" { |
||||||
|
cli.ShowCommandHelpAndExit(ctx, "version", 1) // last argument is exit code
|
||||||
|
} |
||||||
|
|
||||||
|
config, err := loadConfigV2() |
||||||
|
fatalIf(err.Trace(), "Unable to load config", nil) |
||||||
|
|
||||||
|
// convert interface{} back to its original struct
|
||||||
|
newConf := config |
||||||
|
type Version struct { |
||||||
|
Value string `json:"value"` |
||||||
|
} |
||||||
|
if globalJSONFlag { |
||||||
|
tB, e := json.Marshal( |
||||||
|
struct { |
||||||
|
Version Version `json:"version"` |
||||||
|
}{Version: Version{newConf.Version}}, |
||||||
|
) |
||||||
|
fatalIf(probe.NewError(e), "Unable to construct version string.", nil) |
||||||
|
Println(string(tB)) |
||||||
|
return |
||||||
|
} |
||||||
|
Println(newConf.Version) |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus" |
||||||
|
"github.com/minio/minio-xl/pkg/probe" |
||||||
|
) |
||||||
|
|
||||||
|
type localFile struct { |
||||||
|
*os.File |
||||||
|
} |
||||||
|
|
||||||
|
func log2File(filename string) *probe.Error { |
||||||
|
fileHook, e := newFile(filename) |
||||||
|
if e != nil { |
||||||
|
return probe.NewError(e) |
||||||
|
} |
||||||
|
log.Hooks.Add(fileHook) // Add a local file hook.
|
||||||
|
log.Formatter = &logrus.JSONFormatter{} // JSON formatted log.
|
||||||
|
log.Level = logrus.InfoLevel // Minimum log level.
|
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
func newFile(filename string) (*localFile, error) { |
||||||
|
file, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) |
||||||
|
if err != nil { |
||||||
|
return nil, err |
||||||
|
} |
||||||
|
return &localFile{file}, nil |
||||||
|
} |
||||||
|
|
||||||
|
func (l *localFile) Fire(entry *logrus.Entry) error { |
||||||
|
line, err := entry.String() |
||||||
|
if err != nil { |
||||||
|
return fmt.Errorf("Unable to read entry, %v", err) |
||||||
|
} |
||||||
|
l.File.Write([]byte(line + "\n")) |
||||||
|
l.File.Sync() |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
// Levels -
|
||||||
|
func (l *localFile) Levels() []logrus.Level { |
||||||
|
return []logrus.Level{ |
||||||
|
logrus.PanicLevel, |
||||||
|
logrus.FatalLevel, |
||||||
|
logrus.ErrorLevel, |
||||||
|
logrus.WarnLevel, |
||||||
|
logrus.InfoLevel, |
||||||
|
logrus.DebugLevel, |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,218 @@ |
|||||||
|
/* |
||||||
|
* Minio Cloud Storage, (C) 2015 Minio, Inc. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"errors" |
||||||
|
"os" |
||||||
|
"os/user" |
||||||
|
"path/filepath" |
||||||
|
|
||||||
|
"github.com/minio/minio-xl/pkg/probe" |
||||||
|
"github.com/minio/minio-xl/pkg/quick" |
||||||
|
) |
||||||
|
|
||||||
|
// configV1
|
||||||
|
type configV1 struct { |
||||||
|
Version string `json:"version"` |
||||||
|
AccessKeyID string `json:"accessKeyId"` |
||||||
|
SecretAccessKey string `json:"secretAccessKey"` |
||||||
|
} |
||||||
|
|
||||||
|
// configV2
|
||||||
|
type configV2 struct { |
||||||
|
Version string `json:"version"` |
||||||
|
Credentials struct { |
||||||
|
AccessKeyID string `json:"accessKeyId"` |
||||||
|
SecretAccessKey string `json:"secretAccessKey"` |
||||||
|
} `json:"credentials"` |
||||||
|
MongoLogger struct { |
||||||
|
Addr string `json:"addr"` |
||||||
|
DB string `json:"db"` |
||||||
|
Collection string `json:"collection"` |
||||||
|
} `json:"mongoLogger"` |
||||||
|
SyslogLogger struct { |
||||||
|
Network string `json:"network"` |
||||||
|
Addr string `json:"addr"` |
||||||
|
} `json:"syslogLogger"` |
||||||
|
FileLogger struct { |
||||||
|
Filename string `json:"filename"` |
||||||
|
} `json:"fileLogger"` |
||||||
|
} |
||||||
|
|
||||||
|
// getConfigPath get users config path
|
||||||
|
func getConfigPath() (string, *probe.Error) { |
||||||
|
if customConfigPath != "" { |
||||||
|
return customConfigPath, nil |
||||||
|
} |
||||||
|
u, err := user.Current() |
||||||
|
if err != nil { |
||||||
|
return "", probe.NewError(err) |
||||||
|
} |
||||||
|
configPath := filepath.Join(u.HomeDir, ".minio") |
||||||
|
return configPath, nil |
||||||
|
} |
||||||
|
|
||||||
|
// createConfigPath create users config path
|
||||||
|
func createConfigPath() *probe.Error { |
||||||
|
configPath, err := getConfigPath() |
||||||
|
if err != nil { |
||||||
|
return err.Trace() |
||||||
|
} |
||||||
|
if err := os.MkdirAll(configPath, 0700); err != nil { |
||||||
|
return probe.NewError(err) |
||||||
|
} |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
// isAuthConfigFileExists is auth config file exists?
|
||||||
|
func isConfigFileExists() bool { |
||||||
|
if _, err := os.Stat(mustGetConfigFile()); err != nil { |
||||||
|
if os.IsNotExist(err) { |
||||||
|
return false |
||||||
|
} |
||||||
|
panic(err) |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
// mustGetConfigFile always get users config file, if not panic
|
||||||
|
func mustGetConfigFile() string { |
||||||
|
configFile, err := getConfigFile() |
||||||
|
if err != nil { |
||||||
|
panic(err) |
||||||
|
} |
||||||
|
return configFile |
||||||
|
} |
||||||
|
|
||||||
|
// getConfigFile get users config file
|
||||||
|
func getConfigFile() (string, *probe.Error) { |
||||||
|
configPath, err := getConfigPath() |
||||||
|
if err != nil { |
||||||
|
return "", err.Trace() |
||||||
|
} |
||||||
|
return filepath.Join(configPath, "config.json"), nil |
||||||
|
} |
||||||
|
|
||||||
|
// configPath for custom config path only for testing purposes
|
||||||
|
var customConfigPath string |
||||||
|
|
||||||
|
// saveConfig save config
|
||||||
|
func saveConfig(a *configV2) *probe.Error { |
||||||
|
configFile, err := getConfigFile() |
||||||
|
if err != nil { |
||||||
|
return err.Trace() |
||||||
|
} |
||||||
|
qc, err := quick.New(a) |
||||||
|
if err != nil { |
||||||
|
return err.Trace() |
||||||
|
} |
||||||
|
if err := qc.Save(configFile); err != nil { |
||||||
|
return err.Trace() |
||||||
|
} |
||||||
|
return nil |
||||||
|
} |
||||||
|
|
||||||
|
// loadConfigV2 load config
|
||||||
|
func loadConfigV2() (*configV2, *probe.Error) { |
||||||
|
configFile, err := getConfigFile() |
||||||
|
if err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
if _, err := os.Stat(configFile); err != nil { |
||||||
|
return nil, probe.NewError(err) |
||||||
|
} |
||||||
|
a := &configV2{} |
||||||
|
a.Version = "2" |
||||||
|
qc, err := quick.New(a) |
||||||
|
if err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
if err := qc.Load(configFile); err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
return qc.Data().(*configV2), nil |
||||||
|
} |
||||||
|
|
||||||
|
// loadConfigV1 load config
|
||||||
|
func loadConfigV1() (*configV1, *probe.Error) { |
||||||
|
configPath, err := getConfigPath() |
||||||
|
if err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
configFile := filepath.Join(configPath, "fsUsers.json") |
||||||
|
if _, err := os.Stat(configFile); err != nil { |
||||||
|
return nil, probe.NewError(err) |
||||||
|
} |
||||||
|
a := &configV1{} |
||||||
|
a.Version = "1" |
||||||
|
qc, err := quick.New(a) |
||||||
|
if err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
if err := qc.Load(configFile); err != nil { |
||||||
|
return nil, err.Trace() |
||||||
|
} |
||||||
|
return qc.Data().(*configV1), nil |
||||||
|
} |
||||||
|
|
||||||
|
func newConfigV2() *configV2 { |
||||||
|
config := &configV2{} |
||||||
|
config.Version = "2" |
||||||
|
config.Credentials.AccessKeyID = "" |
||||||
|
config.Credentials.SecretAccessKey = "" |
||||||
|
config.MongoLogger.Addr = "" |
||||||
|
config.MongoLogger.DB = "" |
||||||
|
config.MongoLogger.Collection = "" |
||||||
|
config.SyslogLogger.Network = "" |
||||||
|
config.SyslogLogger.Addr = "" |
||||||
|
config.FileLogger.Filename = "" |
||||||
|
return config |
||||||
|
} |
||||||
|
|
||||||
|
func migrateConfig() { |
||||||
|
migrateV1ToV2() |
||||||
|
} |
||||||
|
|
||||||
|
func migrateV1ToV2() { |
||||||
|
cv1, err := loadConfigV1() |
||||||
|
if err != nil { |
||||||
|
if os.IsNotExist(err.ToGoError()) { |
||||||
|
return |
||||||
|
} |
||||||
|
} |
||||||
|
fatalIf(err.Trace(), "Unable to load config version ‘1’.", nil) |
||||||
|
|
||||||
|
if cv1.Version != "1" { |
||||||
|
fatalIf(probe.NewError(errors.New("")), "Invalid version loaded ‘"+cv1.Version+"’.", nil) |
||||||
|
} |
||||||
|
|
||||||
|
cv2 := newConfigV2() |
||||||
|
cv2.Credentials.AccessKeyID = cv1.AccessKeyID |
||||||
|
cv2.Credentials.SecretAccessKey = cv1.SecretAccessKey |
||||||
|
err = saveConfig(cv2) |
||||||
|
fatalIf(err.Trace(), "Unable to save config version ‘2’.", nil) |
||||||
|
|
||||||
|
Println("Migration from version ‘1’ to ‘2’ completed successfully.") |
||||||
|
|
||||||
|
/// Purge old fsUsers.json file
|
||||||
|
configPath, err := getConfigPath() |
||||||
|
fatalIf(err.Trace(), "Unable to retrieve config path.", nil) |
||||||
|
|
||||||
|
configFile := filepath.Join(configPath, "fsUsers.json") |
||||||
|
os.RemoveAll(configFile) |
||||||
|
} |
Loading…
Reference in new issue