From 748870b03ff3b80bf7603f4bdf162e0838f3acba Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Sun, 19 Aug 2018 15:36:30 -0700 Subject: [PATCH] add "weed scaffold" command --- weed/command/command.go | 1 + weed/command/filer.go | 5 +- weed/{filer.toml => command/scaffold.go} | 57 +++++++++++++++-- weed/filer2/configuration.go | 79 ------------------------ 4 files changed, 56 insertions(+), 86 deletions(-) rename weed/{filer.toml => command/scaffold.go} (66%) diff --git a/weed/command/command.go b/weed/command/command.go index c6b005dd9..0d72ee0db 100644 --- a/weed/command/command.go +++ b/weed/command/command.go @@ -19,6 +19,7 @@ var Commands = []*Command{ cmdS3, cmdUpload, cmdDownload, + cmdScaffold, cmdShell, cmdVersion, cmdVolume, diff --git a/weed/command/filer.go b/weed/command/filer.go index eaef380a2..30a8b6412 100644 --- a/weed/command/filer.go +++ b/weed/command/filer.go @@ -5,7 +5,6 @@ import ( "strconv" "time" - "github.com/chrislusf/seaweedfs/weed/filer2" "github.com/chrislusf/seaweedfs/weed/glog" "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/server" @@ -68,9 +67,9 @@ var cmdFiler = &Command{ The configuration file "filer.toml" is read from ".", "$HOME/.seaweedfs/", or "/etc/seaweedfs/", in that order. - The following are example filer.toml configuration file. + The example filer.toml configuration file can be generated by "weed scaffold filer" -` + filer2.FILER_TOML_EXAMPLE + "\n", +`, } func runFiler(cmd *Command, args []string) bool { diff --git a/weed/filer.toml b/weed/command/scaffold.go similarity index 66% rename from weed/filer.toml rename to weed/command/scaffold.go index 4c9dc2041..64aa59fb8 100644 --- a/weed/filer.toml +++ b/weed/command/scaffold.go @@ -1,4 +1,50 @@ -# An example TOML config file for SeaweedFS filer store +package command + +import ( + "io/ioutil" + "path/filepath" +) + +func init() { + cmdScaffold.Run = runScaffold // break init cycle +} + +var cmdScaffold = &Command{ + UsageLine: "scaffold [filer]", + Short: "generate basic configuration files", + Long: `Generate filer.toml with all possible configurations for you to customize. + + `, +} + +var ( + outputPath = cmdScaffold.Flag.String("output", "", "if not empty, save the configuration file to this directory") + config = cmdScaffold.Flag.String("config", "filer", "the configuration file to generate") +) + +func runScaffold(cmd *Command, args []string) bool { + + content := "" + switch *config { + case "filer": + content = FILER_TOML_EXAMPLE + } + if content == "" { + println("need a valid -config option") + return false + } + + if *outputPath != "" { + ioutil.WriteFile(filepath.Join(*outputPath, *config+".toml"), []byte(content), 0x755) + } else { + println(content) + } + return true +} + +const ( + FILER_TOML_EXAMPLE = ` +# A sample TOML config file for SeaweedFS filer store [memory] # local in memory, mostly for testing purpose @@ -6,7 +52,7 @@ enabled = false [leveldb] # local on disk, mostly for simple single-machine setup, fairly scalable -enabled = true +enabled = false dir = "." # directory to store level db files #################################################### @@ -21,7 +67,7 @@ dir = "." # directory to store level db files # meta BLOB, # PRIMARY KEY (dirhash, name) # ) DEFAULT CHARSET=utf8; -enabled = false +enabled = true hostname = "localhost" port = 3306 username = "root" @@ -62,7 +108,7 @@ hosts=[ ] [redis] -enabled = false +enabled = true address = "localhost:6379" password = "" db = 0 @@ -73,6 +119,7 @@ addresses = [ "localhost:6379", ] + #################################################### # notification # sends filer updates for each file to an external message queue @@ -87,3 +134,5 @@ hosts = [ ] topic = "seaweedfs_filer" +` +) diff --git a/weed/filer2/configuration.go b/weed/filer2/configuration.go index 510e27ab1..80755ee5e 100644 --- a/weed/filer2/configuration.go +++ b/weed/filer2/configuration.go @@ -7,85 +7,6 @@ import ( "github.com/spf13/viper" ) -const ( - FILER_TOML_EXAMPLE = ` -# A sample TOML config file for SeaweedFS filer store - -[memory] -# local in memory, mostly for testing purpose -enabled = false - -[leveldb] -# local on disk, mostly for simple single-machine setup, fairly scalable -enabled = false -dir = "." # directory to store level db files - -#################################################### -# multiple filers on shared storage, fairly scalable -#################################################### - -[mysql] -# CREATE TABLE IF NOT EXISTS filemeta ( -# dirhash BIGINT COMMENT 'first 64 bits of MD5 hash value of directory field', -# name VARCHAR(1000) COMMENT 'directory or file name', -# directory VARCHAR(4096) COMMENT 'full path to parent directory', -# meta BLOB, -# PRIMARY KEY (dirhash, name) -# ) DEFAULT CHARSET=utf8; -enabled = true -hostname = "localhost" -port = 3306 -username = "root" -password = "" -database = "" # create or use an existing database -connection_max_idle = 2 -connection_max_open = 100 - -[postgres] -# CREATE TABLE IF NOT EXISTS filemeta ( -# dirhash BIGINT, -# name VARCHAR(1000), -# directory VARCHAR(4096), -# meta bytea, -# PRIMARY KEY (dirhash, name) -# ); -enabled = false -hostname = "localhost" -port = 5432 -username = "postgres" -password = "" -database = "" # create or use an existing database -sslmode = "disable" -connection_max_idle = 100 -connection_max_open = 100 - -[cassandra] -# CREATE TABLE filemeta ( -# directory varchar, -# name varchar, -# meta blob, -# PRIMARY KEY (directory, name) -# ) WITH CLUSTERING ORDER BY (name ASC); -enabled = false -keyspace="seaweedfs" -hosts=[ - "localhost:9042", -] - -[redis] -enabled = true -address = "localhost:6379" -password = "" -db = 0 - -[redis_cluster] -enabled = false -addresses = [ - "localhost:6379", -] - -` -) var ( Stores []FilerStore