From f334575e69829e07b3aceaef2b929dfbd4b30300 Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Tue, 30 Oct 2018 11:54:08 +0530 Subject: [PATCH] perform weave connect replace on node delete with empty peer list --- api/router.go | 7 +++++++ prog/kube-utils/main.go | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/api/router.go b/api/router.go index 555ee5f8..3db61ddc 100644 --- a/api/router.go +++ b/api/router.go @@ -3,6 +3,7 @@ package api import ( "fmt" "net" + "net/url" ) // Expose calls the router to assign the given IP addr to the weave bridge. @@ -10,3 +11,9 @@ func (client *Client) Expose(ipAddr *net.IPNet) error { _, err := client.httpVerb("POST", fmt.Sprintf("/expose/%s", ipAddr), nil) return err } + +// ReplacePeers replace the current set of peers +func (client *Client) ReplacePeers(peers []string) error { + _, err := client.httpVerb("POST", "/connect", url.Values{"replace": {"true"}, "peer": peers}) + return err +} diff --git a/prog/kube-utils/main.go b/prog/kube-utils/main.go index 1d62e501..bb93dcb7 100644 --- a/prog/kube-utils/main.go +++ b/prog/kube-utils/main.go @@ -201,6 +201,16 @@ func reclaimPeer(weave weaveClient, cml *configMapAnnotations, storedPeerList *p return true, err } +// resetPeers replaces the peers list with empty list of peers +func resetPeers() error { + weave := weaveapi.NewClient(os.Getenv("WEAVE_HTTP_ADDR"), common.Log) + err := weave.ReplacePeers(nil) + if err != nil { + return err + } + return nil +} + // regiesters with Kubernetes API server for node delete events. Node delete event handler // invokes reclaimRemovedPeers to remove it from IPAM so that IP space is reclaimed func registerForNodeUpdates(client *kubernetes.Clientset, stopCh <-chan struct{}, nodeName, peerName string) { @@ -219,6 +229,10 @@ func registerForNodeUpdates(client *kubernetes.Clientset, stopCh <-chan struct{} if err != nil { common.Log.Fatalf("[kube-peers] Error while reclaiming space: %v", err) } + err = resetPeers() + if err != nil { + common.Log.Fatalf("[kube-peers] Error resetting peer list: %v", err) + } }, }) informerFactory.WaitForCacheSync(stopCh)