diff --git a/cmd/traefik/anonymize/anonymize.go b/anonymize/anonymize.go similarity index 100% rename from cmd/traefik/anonymize/anonymize.go rename to anonymize/anonymize.go diff --git a/cmd/traefik/anonymize/anonymize_config_test.go b/anonymize/anonymize_config_test.go similarity index 100% rename from cmd/traefik/anonymize/anonymize_config_test.go rename to anonymize/anonymize_config_test.go diff --git a/cmd/traefik/anonymize/anonymize_doOnJSON_test.go b/anonymize/anonymize_doOnJSON_test.go similarity index 100% rename from cmd/traefik/anonymize/anonymize_doOnJSON_test.go rename to anonymize/anonymize_doOnJSON_test.go diff --git a/cmd/traefik/anonymize/anonymize_doOnStruct_test.go b/anonymize/anonymize_doOnStruct_test.go similarity index 100% rename from cmd/traefik/anonymize/anonymize_doOnStruct_test.go rename to anonymize/anonymize_doOnStruct_test.go diff --git a/cmd/traefik/bug.go b/cmd/bug/bug.go similarity index 82% rename from cmd/traefik/bug.go rename to cmd/bug/bug.go index 2c7551853..d45b0927c 100644 --- a/cmd/traefik/bug.go +++ b/cmd/bug/bug.go @@ -1,4 +1,4 @@ -package main +package bug import ( "bytes" @@ -9,7 +9,9 @@ import ( "text/template" "github.com/containous/flaeg" - "github.com/containous/traefik/cmd/traefik/anonymize" + "github.com/containous/traefik/anonymize" + "github.com/containous/traefik/cmd" + "github.com/containous/traefik/cmd/version" ) const ( @@ -83,8 +85,8 @@ Add more configuration information here. ` ) -// newBugCmd builds a new Bug command -func newBugCmd(traefikConfiguration *TraefikConfiguration, traefikPointersConfiguration *TraefikConfiguration) *flaeg.Command { +// NewCmd builds a new Bug command +func NewCmd(traefikConfiguration *cmd.TraefikConfiguration, traefikPointersConfiguration *cmd.TraefikConfiguration) *flaeg.Command { //version Command init return &flaeg.Command{ @@ -92,30 +94,30 @@ func newBugCmd(traefikConfiguration *TraefikConfiguration, traefikPointersConfig Description: `Report an issue on Traefik bugtracker`, Config: traefikConfiguration, DefaultPointersConfig: traefikPointersConfiguration, - Run: runBugCmd(traefikConfiguration), + Run: runCmd(traefikConfiguration), Metadata: map[string]string{ "parseAllSources": "true", }, } } -func runBugCmd(traefikConfiguration *TraefikConfiguration) func() error { +func runCmd(traefikConfiguration *cmd.TraefikConfiguration) func() error { return func() error { - body, err := createBugReport(traefikConfiguration) + body, err := createReport(traefikConfiguration) if err != nil { return err } - sendBugReport(body) + sendReport(body) return nil } } -func createBugReport(traefikConfiguration *TraefikConfiguration) (string, error) { - var version bytes.Buffer - if err := getVersionPrint(&version); err != nil { +func createReport(traefikConfiguration *cmd.TraefikConfiguration) (string, error) { + var versionPrint bytes.Buffer + if err := version.GetPrint(&versionPrint); err != nil { return "", err } @@ -133,7 +135,7 @@ func createBugReport(traefikConfiguration *TraefikConfiguration) (string, error) Version string Configuration string }{ - Version: version.String(), + Version: versionPrint.String(), Configuration: config, } @@ -145,7 +147,7 @@ func createBugReport(traefikConfiguration *TraefikConfiguration) (string, error) return bug.String(), nil } -func sendBugReport(body string) { +func sendReport(body string) { URL := bugTracker + "?body=" + url.QueryEscape(body) if err := openBrowser(URL); err != nil { fmt.Printf("Please file a new issue at %s using this template:\n\n", bugTracker) diff --git a/cmd/traefik/bug_test.go b/cmd/bug/bug_test.go similarity index 84% rename from cmd/traefik/bug_test.go rename to cmd/bug/bug_test.go index ef81091f1..9c66ac110 100644 --- a/cmd/traefik/bug_test.go +++ b/cmd/bug/bug_test.go @@ -1,9 +1,10 @@ -package main +package bug import ( "testing" - "github.com/containous/traefik/cmd/traefik/anonymize" + "github.com/containous/traefik/anonymize" + "github.com/containous/traefik/cmd" "github.com/containous/traefik/configuration" "github.com/containous/traefik/provider/file" "github.com/containous/traefik/tls" @@ -11,8 +12,8 @@ import ( "github.com/stretchr/testify/assert" ) -func Test_createBugReport(t *testing.T) { - traefikConfiguration := &TraefikConfiguration{ +func Test_createReport(t *testing.T) { + traefikConfiguration := &cmd.TraefikConfiguration{ ConfigFile: "FOO", GlobalConfiguration: configuration.GlobalConfiguration{ EntryPoints: configuration.EntryPoints{ @@ -37,7 +38,7 @@ func Test_createBugReport(t *testing.T) { }, } - report, err := createBugReport(traefikConfiguration) + report, err := createReport(traefikConfiguration) assert.NoError(t, err, report) // exported anonymous configuration @@ -47,7 +48,7 @@ func Test_createBugReport(t *testing.T) { } func Test_anonymize_traefikConfiguration(t *testing.T) { - traefikConfiguration := &TraefikConfiguration{ + traefikConfiguration := &cmd.TraefikConfiguration{ ConfigFile: "FOO", GlobalConfiguration: configuration.GlobalConfiguration{ EntryPoints: configuration.EntryPoints{ diff --git a/cmd/traefik/configuration.go b/cmd/configuration.go similarity index 99% rename from cmd/traefik/configuration.go rename to cmd/configuration.go index dae3d1ab5..bc6a0df03 100644 --- a/cmd/traefik/configuration.go +++ b/cmd/configuration.go @@ -1,4 +1,4 @@ -package main +package cmd import ( "time" diff --git a/cmd/traefik/healthcheck.go b/cmd/healthcheck/healthcheck.go similarity index 74% rename from cmd/traefik/healthcheck.go rename to cmd/healthcheck/healthcheck.go index 67ee6cd98..5acad5035 100644 --- a/cmd/traefik/healthcheck.go +++ b/cmd/healthcheck/healthcheck.go @@ -1,4 +1,4 @@ -package main +package healthcheck import ( "crypto/tls" @@ -9,27 +9,29 @@ import ( "time" "github.com/containous/flaeg" + "github.com/containous/traefik/cmd" "github.com/containous/traefik/configuration" ) -func newHealthCheckCmd(traefikConfiguration *TraefikConfiguration, traefikPointersConfiguration *TraefikConfiguration) *flaeg.Command { +// NewCmd builds a new HealthCheck command +func NewCmd(traefikConfiguration *cmd.TraefikConfiguration, traefikPointersConfiguration *cmd.TraefikConfiguration) *flaeg.Command { return &flaeg.Command{ Name: "healthcheck", Description: `Calls traefik /ping to check health (web provider must be enabled)`, Config: traefikConfiguration, DefaultPointersConfig: traefikPointersConfiguration, - Run: runHealthCheck(traefikConfiguration), + Run: runCmd(traefikConfiguration), Metadata: map[string]string{ "parseAllSources": "true", }, } } -func runHealthCheck(traefikConfiguration *TraefikConfiguration) func() error { +func runCmd(traefikConfiguration *cmd.TraefikConfiguration) func() error { return func() error { traefikConfiguration.GlobalConfiguration.SetEffectiveConfiguration(traefikConfiguration.ConfigFile) - resp, errPing := healthCheck(traefikConfiguration.GlobalConfiguration) + resp, errPing := Do(traefikConfiguration.GlobalConfiguration) if errPing != nil { fmt.Printf("Error calling healthcheck: %s\n", errPing) os.Exit(1) @@ -44,11 +46,11 @@ func runHealthCheck(traefikConfiguration *TraefikConfiguration) func() error { } } -func healthCheck(globalConfiguration configuration.GlobalConfiguration) (*http.Response, error) { +// Do try to do a healthcheck +func Do(globalConfiguration configuration.GlobalConfiguration) (*http.Response, error) { if globalConfiguration.Ping == nil { return nil, errors.New("please enable `ping` to use health check") } - pingEntryPoint, ok := globalConfiguration.EntryPoints[globalConfiguration.Ping.EntryPoint] if !ok { return nil, errors.New("missing `ping` entrypoint") diff --git a/cmd/traefik/storeconfig.go b/cmd/storeconfig/storeconfig.go similarity index 88% rename from cmd/traefik/storeconfig.go rename to cmd/storeconfig/storeconfig.go index 51add25da..a5686fe86 100644 --- a/cmd/traefik/storeconfig.go +++ b/cmd/storeconfig/storeconfig.go @@ -1,4 +1,4 @@ -package main +package storeconfig import ( "encoding/json" @@ -10,9 +10,11 @@ import ( "github.com/containous/staert" "github.com/containous/traefik/acme" "github.com/containous/traefik/cluster" + "github.com/containous/traefik/cmd" ) -func newStoreConfigCmd(traefikConfiguration *TraefikConfiguration, traefikPointersConfiguration *TraefikConfiguration) *flaeg.Command { +// NewCmd builds a new StoreConfig command +func NewCmd(traefikConfiguration *cmd.TraefikConfiguration, traefikPointersConfiguration *cmd.TraefikConfiguration) *flaeg.Command { return &flaeg.Command{ Name: "storeconfig", Description: `Store the static traefik configuration into a Key-value stores. Traefik will not start.`, @@ -24,7 +26,8 @@ func newStoreConfigCmd(traefikConfiguration *TraefikConfiguration, traefikPointe } } -func runStoreConfig(kv *staert.KvSource, traefikConfiguration *TraefikConfiguration) func() error { +// Run store config in KV +func Run(kv *staert.KvSource, traefikConfiguration *cmd.TraefikConfiguration) func() error { return func() error { if kv == nil { return fmt.Errorf("error using command storeconfig, no Key-value store defined") @@ -112,9 +115,9 @@ func runStoreConfig(kv *staert.KvSource, traefikConfiguration *TraefikConfigurat } } -// createKvSource creates KvSource +// CreateKvSource creates KvSource // TLS support is enable for Consul and Etcd backends -func createKvSource(traefikConfiguration *TraefikConfiguration) (*staert.KvSource, error) { +func CreateKvSource(traefikConfiguration *cmd.TraefikConfiguration) (*staert.KvSource, error) { var kv *staert.KvSource var kvStore store.Store var err error diff --git a/cmd/traefik/traefik.go b/cmd/traefik/traefik.go index da46a03d0..e19d8d8b2 100644 --- a/cmd/traefik/traefik.go +++ b/cmd/traefik/traefik.go @@ -14,6 +14,11 @@ import ( "github.com/containous/flaeg" "github.com/containous/staert" "github.com/containous/traefik/acme" + "github.com/containous/traefik/cmd" + "github.com/containous/traefik/cmd/bug" + "github.com/containous/traefik/cmd/healthcheck" + "github.com/containous/traefik/cmd/storeconfig" + cmdVersion "github.com/containous/traefik/cmd/version" "github.com/containous/traefik/collector" "github.com/containous/traefik/configuration" "github.com/containous/traefik/job" @@ -33,8 +38,8 @@ import ( func main() { // traefik config inits - traefikConfiguration := NewTraefikConfiguration() - traefikPointersConfiguration := NewTraefikDefaultPointersConfiguration() + traefikConfiguration := cmd.NewTraefikConfiguration() + traefikPointersConfiguration := cmd.NewTraefikDefaultPointersConfiguration() // traefik Command init traefikCmd := &flaeg.Command{ @@ -44,13 +49,13 @@ Complete documentation is available at https://traefik.io`, Config: traefikConfiguration, DefaultPointersConfig: traefikPointersConfiguration, Run: func() error { - run(&traefikConfiguration.GlobalConfiguration, traefikConfiguration.ConfigFile) + runCmd(&traefikConfiguration.GlobalConfiguration, traefikConfiguration.ConfigFile) return nil }, } // storeconfig Command init - storeConfigCmd := newStoreConfigCmd(traefikConfiguration, traefikPointersConfiguration) + storeConfigCmd := storeconfig.NewCmd(traefikConfiguration, traefikPointersConfiguration) // init flaeg source f := flaeg.New(traefikCmd, os.Args[1:]) @@ -65,10 +70,10 @@ Complete documentation is available at https://traefik.io`, f.AddParser(reflect.TypeOf(types.Buckets{}), &types.Buckets{}) // add commands - f.AddCommand(newVersionCmd()) - f.AddCommand(newBugCmd(traefikConfiguration, traefikPointersConfiguration)) + f.AddCommand(cmdVersion.NewCmd()) + f.AddCommand(bug.NewCmd(traefikConfiguration, traefikPointersConfiguration)) f.AddCommand(storeConfigCmd) - f.AddCommand(newHealthCheckCmd(traefikConfiguration, traefikPointersConfiguration)) + f.AddCommand(healthcheck.NewCmd(traefikConfiguration, traefikPointersConfiguration)) usedCmd, err := f.GetCommand() if err != nil { @@ -99,12 +104,12 @@ Complete documentation is available at https://traefik.io`, traefikConfiguration.ConfigFile = toml.ConfigFileUsed() - kv, err := createKvSource(traefikConfiguration) + kv, err := storeconfig.CreateKvSource(traefikConfiguration) if err != nil { fmtlog.Printf("Error creating kv store: %s\n", err) os.Exit(1) } - storeConfigCmd.Run = runStoreConfig(kv, traefikConfiguration) + storeConfigCmd.Run = storeconfig.Run(kv, traefikConfiguration) // if a KV Store is enable and no sub-command called in args if kv != nil && usedCmd == traefikCmd { @@ -137,7 +142,7 @@ Complete documentation is available at https://traefik.io`, os.Exit(0) } -func run(globalConfiguration *configuration.GlobalConfiguration, configFile string) { +func runCmd(globalConfiguration *configuration.GlobalConfiguration, configFile string) { configureLogging(globalConfiguration) if len(configFile) > 0 { @@ -178,7 +183,7 @@ func run(globalConfiguration *configuration.GlobalConfiguration, configFile stri safe.Go(func() { tick := time.Tick(t) for range tick { - _, errHealthCheck := healthCheck(*globalConfiguration) + _, errHealthCheck := healthcheck.Do(*globalConfiguration) if globalConfiguration.Ping == nil || errHealthCheck == nil { if ok, _ := daemon.SdNotify(false, "WATCHDOG=1"); !ok { log.Error("Fail to tick watchdog") diff --git a/cmd/traefik/version.go b/cmd/version/version.go similarity index 82% rename from cmd/traefik/version.go rename to cmd/version/version.go index eb17ac33b..8a2bbafff 100644 --- a/cmd/traefik/version.go +++ b/cmd/version/version.go @@ -1,4 +1,4 @@ -package main +package version import ( "fmt" @@ -17,17 +17,15 @@ Go version: {{.GoVersion}} Built: {{.BuildTime}} OS/Arch: {{.Os}}/{{.Arch}}` -// newVersionCmd builds a new Version command -func newVersionCmd() *flaeg.Command { - - //version Command init +// NewCmd builds a new Version command +func NewCmd() *flaeg.Command { return &flaeg.Command{ Name: "version", Description: `Print version`, Config: struct{}{}, DefaultPointersConfig: struct{}{}, Run: func() error { - if err := getVersionPrint(os.Stdout); err != nil { + if err := GetPrint(os.Stdout); err != nil { return err } fmt.Print("\n") @@ -37,7 +35,8 @@ func newVersionCmd() *flaeg.Command { } } -func getVersionPrint(wr io.Writer) error { +// GetPrint write Printable version +func GetPrint(wr io.Writer) error { tmpl, err := template.New("").Parse(versionTemplate) if err != nil { return err diff --git a/collector/collector.go b/collector/collector.go index 63d1fb81e..de492a376 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -9,7 +9,7 @@ import ( "strconv" "time" - "github.com/containous/traefik/cmd/traefik/anonymize" + "github.com/containous/traefik/anonymize" "github.com/containous/traefik/configuration" "github.com/containous/traefik/log" "github.com/containous/traefik/version"