diff --git a/api/ipam.go b/api/ipam.go index 3f15af7f..d3463906 100644 --- a/api/ipam.go +++ b/api/ipam.go @@ -53,6 +53,14 @@ func (client *Client) DefaultSubnet() (*net.IPNet, error) { return ipnet, err } +func (client *Client) LocalRangeTracker() (string, error) { + t, err := client.httpVerb("GET", fmt.Sprintf("/ipinfo/tracker"), nil) + if err != nil { + return "", err + } + return t, nil +} + func parseIP(body string) (*net.IPNet, error) { ip, ipnet, err := net.ParseCIDR(string(body)) if err != nil { diff --git a/ipam/http.go b/ipam/http.go index 0d68052a..04eb2088 100644 --- a/ipam/http.go +++ b/ipam/http.go @@ -87,7 +87,7 @@ func (alloc *Allocator) handleHTTPClaim(dockerCli *docker.Client, w http.Respons } // HandleHTTP wires up ipams HTTP endpoints to the provided mux. -func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CIDR, dockerCli *docker.Client) { +func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CIDR, tracker string, dockerCli *docker.Client) { router.Methods("GET").Path("/ipinfo/defaultsubnet").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s", defaultSubnet) }) @@ -174,4 +174,8 @@ func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CID transferred := alloc.AdminTakeoverRanges(ident) fmt.Fprintf(w, "%d IPs taken over from %s\n", transferred, ident) }) + + router.Methods("GET").Path("/ipinfo/tracker").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, tracker) + }) } diff --git a/ipam/http_test.go b/ipam/http_test.go index 176da222..c371949b 100644 --- a/ipam/http_test.go +++ b/ipam/http_test.go @@ -43,7 +43,7 @@ func listenHTTP(alloc *Allocator, subnet address.CIDR) int { router.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) { io.WriteString(w, fmt.Sprintln(alloc)) }) - alloc.HandleHTTP(router, subnet, nil) + alloc.HandleHTTP(router, subnet, "", nil) httpListener, err := net.Listen("tcp", ":0") if err != nil { diff --git a/prog/weaver/main.go b/prog/weaver/main.go index a7e11718..798a1f5a 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -303,6 +303,7 @@ func main() { var ( allocator *ipam.Allocator defaultSubnet address.CIDR + trackerName string ) if ipamConfig.Enabled() { var t tracker.LocalRangeTracker @@ -312,6 +313,7 @@ func main() { if err != nil { Log.Fatalf("Cannot create AWSVPC LocalRangeTracker: %s", err) } + trackerName = "awsvpc" } allocator, defaultSubnet = createAllocator(router, ipamConfig, db, t, isKnownPeer) observeContainers(allocator) @@ -344,7 +346,7 @@ func main() { if httpAddr != "" { muxRouter := mux.NewRouter() if allocator != nil { - allocator.HandleHTTP(muxRouter, defaultSubnet, dockerCli) + allocator.HandleHTTP(muxRouter, defaultSubnet, trackerName, dockerCli) } if ns != nil { ns.HandleHTTP(muxRouter, dockerCli)