From c460f3abcd4868268f55871d3a24e22fd0ebc8c7 Mon Sep 17 00:00:00 2001 From: emile Date: Tue, 1 Sep 2015 22:28:24 +0200 Subject: [PATCH] toml config --- tortuous.go | 55 +++++++++++++++++++++++++++++++++++++++++++-------- tortuous.toml | 19 ++++++++++++++++++ 2 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 tortuous.toml diff --git a/tortuous.go b/tortuous.go index 8bc6eff42..927304bfa 100644 --- a/tortuous.go +++ b/tortuous.go @@ -5,17 +5,52 @@ import ( "net/http" "fmt" "os" - "github.com/wunderlist/moxy" + "github.com/mailgun/oxy/forward" + "github.com/mailgun/oxy/roundrobin" + "github.com/mailgun/oxy/testutils" "time" "net" "os/signal" "syscall" + "github.com/BurntSushi/toml" ) +type Backend struct { + Name string + Servers []string +} + +type Server struct { + Name string + Url string +} + +type Rule struct { + Category string + Value string +} + +type Route struct { + Name string + Rules map[string]Rule +} + +type Config struct { + Backends []Backend + Servers []Server + Routes []Route +} + var srv *graceful.Server func main() { - fmt.Println("Tortuous loading with pid", os.Getpid()) + + var config Config + if _, err := toml.DecodeFile("tortuous.toml", &config); err != nil { + fmt.Println(err) + return + } + fmt.Printf("%+v\n", config ) sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) @@ -23,14 +58,18 @@ func main() { systemRouter := mux.NewRouter() systemRouter.Methods("POST").Path("/").HandlerFunc(ReloadHandler) systemRouter.Methods("GET").Path("/").HandlerFunc(GetPidHandler) + go http.ListenAndServe(":8000", systemRouter) + + + + fwd, _ := forward.New() + lb, _ := roundrobin.New(fwd) + + lb.UpsertServer(testutils.ParseURI("http://172.17.0.2:80")) + lb.UpsertServer(testutils.ParseURI("http://172.17.0.3:80")) userRouter := mux.NewRouter() - hosts := []string{"172.17.0.2"} - filters := []moxy.FilterFunc{} - proxy := moxy.NewReverseProxy(hosts, filters) - userRouter.Host("test.zenika.fr").HandlerFunc(proxy.ServeHTTP) - - go http.ListenAndServe(":8000", systemRouter) + userRouter.Host("test.zenika.fr").Handler(lb) goAway := false go func() { diff --git a/tortuous.toml b/tortuous.toml new file mode 100644 index 000000000..3fb69eca9 --- /dev/null +++ b/tortuous.toml @@ -0,0 +1,19 @@ +[[backends]] +name = "backend1" +servers = ["server1", "server2"] + +[[servers]] +name = "server1" +url = "http://172.17.0.2:80" + +[[servers]] +name = "server2" +url = "http://172.17.0.3:80" + +[[routes]] +name = "route1" +backends = ["backend1"] + [[rules]] + [[rules.1]] + category = "Host" + value = "test.zenika.fr"