From 62c30d9130cfdc44102ea186ea7d699664085d0a Mon Sep 17 00:00:00 2001 From: Martynas Pumputis Date: Thu, 10 May 2018 12:11:08 +0200 Subject: [PATCH] Extern LocalRangeTracker interface with String method Cleaner approach than passing a tracker name to ipam/http. --- ipam/allocator.go | 2 ++ ipam/http.go | 4 ++-- ipam/http_test.go | 2 +- ipam/tracker/awsvpc.go | 4 ++++ ipam/tracker/tracker.go | 3 +++ prog/weaver/main.go | 4 +--- 6 files changed, 13 insertions(+), 6 deletions(-) diff --git a/ipam/allocator.go b/ipam/allocator.go index b17592a0..3fc5e1e9 100644 --- a/ipam/allocator.go +++ b/ipam/allocator.go @@ -74,6 +74,7 @@ type Allocator struct { isKnownPeer func(mesh.PeerName) bool quorum func() uint now func() time.Time + tracker tracker.LocalRangeTracker } // PreClaims are IP addresses discovered before we could initialize IPAM @@ -130,6 +131,7 @@ func NewAllocator(config Config) *Allocator { quorum: config.Quorum, dead: make(map[string]time.Time), now: time.Now, + tracker: config.Tracker, } alloc.pendingClaims = make([]operation, len(config.PreClaims)) diff --git a/ipam/http.go b/ipam/http.go index b024f3ae..187a6b4e 100644 --- a/ipam/http.go +++ b/ipam/http.go @@ -88,7 +88,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, tracker string, dockerCli *docker.Client) { +func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CIDR, dockerCli *docker.Client) { router.Methods("GET").Path("/ipinfo/defaultsubnet").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "%s", defaultSubnet) }) @@ -199,6 +199,6 @@ func (alloc *Allocator) HandleHTTP(router *mux.Router, defaultSubnet address.CID }) router.Methods("GET").Path("/ipinfo/tracker").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, tracker) + fmt.Fprintf(w, alloc.tracker.String()) }) } diff --git a/ipam/http_test.go b/ipam/http_test.go index 1849ebb8..14ba7d41 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/ipam/tracker/awsvpc.go b/ipam/tracker/awsvpc.go index d4836953..02489b19 100644 --- a/ipam/tracker/awsvpc.go +++ b/ipam/tracker/awsvpc.go @@ -123,6 +123,10 @@ func (t *AWSVPCTracker) HandleUpdate(prevRanges, currRanges []address.Range, loc return nil } +func (t *AWSVPCTracker) String() string { + return "awsvpc" +} + func (t *AWSVPCTracker) createVPCRoute(cidr string) (*ec2.CreateRouteOutput, error) { route := &ec2.CreateRouteInput{ RouteTableId: &t.routeTableID, diff --git a/ipam/tracker/tracker.go b/ipam/tracker/tracker.go index 6a9846db..61302e2a 100644 --- a/ipam/tracker/tracker.go +++ b/ipam/tracker/tracker.go @@ -17,4 +17,7 @@ type LocalRangeTracker interface { // The local parameter indicates whether the ranges belong to the peer // by which the method is called. HandleUpdate(prevRanges, currRanges []address.Range, local bool) error + + // String returns the tracker name + String() string } diff --git a/prog/weaver/main.go b/prog/weaver/main.go index 33f18a65..c81dd05d 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -396,7 +396,6 @@ func main() { var ( allocator *ipam.Allocator defaultSubnet address.CIDR - trackerName string ) if ipamConfig.Enabled() { var t tracker.LocalRangeTracker @@ -406,7 +405,6 @@ func main() { if err != nil { Log.Fatalf("Cannot create AWSVPC LocalRangeTracker: %s", err) } - trackerName = "awsvpc" } preClaims, err := findExistingAddresses(dockerCli, bridgeConfig.WeaveBridgeName) @@ -454,7 +452,7 @@ func main() { if httpAddr != "" { muxRouter := mux.NewRouter() if allocator != nil { - allocator.HandleHTTP(muxRouter, defaultSubnet, trackerName, dockerCli) + allocator.HandleHTTP(muxRouter, defaultSubnet, dockerCli) } if ns != nil { ns.HandleHTTP(muxRouter, dockerCli)