diff --git a/prog/weaver/discovery.go b/prog/weaver/discovery.go index b298a2d7..2003b50c 100644 --- a/prog/weaver/discovery.go +++ b/prog/weaver/discovery.go @@ -23,6 +23,7 @@ type PeerUpdateRequest struct { type PeerUpdateResponse struct { Addresses []string `json:"addresses"` + PeerCount int `json:"peercount"` } var httpClient = &http.Client{Timeout: 30 * time.Second} @@ -58,7 +59,7 @@ func do(verb string, discoveryEndpoint, token string, request interface{}, respo return err } -func peerDiscoveryUpdate(discoveryEndpoint, token, peername, nickname string, addresses []string) ([]string, error) { +func peerDiscoveryUpdate(discoveryEndpoint, token, peername, nickname string, addresses []string) ([]string, int, error) { request := PeerUpdateRequest{ Name: peername, Nickname: nickname, @@ -66,7 +67,7 @@ func peerDiscoveryUpdate(discoveryEndpoint, token, peername, nickname string, ad } var updateResponse PeerUpdateResponse err := do("POST", discoveryEndpoint, token, request, &updateResponse) - return updateResponse.Addresses, err + return updateResponse.Addresses, updateResponse.PeerCount, err } func peerDiscoveryDelete(discoveryEndpoint, token, peername string) error { diff --git a/prog/weaver/main.go b/prog/weaver/main.go index 2e736b87..a5871ec7 100644 --- a/prog/weaver/main.go +++ b/prog/weaver/main.go @@ -278,8 +278,11 @@ func main() { } else { addresses = strings.Split(advertiseAddress, ",") } - discoveredPeers, err := peerDiscoveryUpdate(discoveryEndpoint, token, name.String(), nickName, addresses) + discoveredPeers, count, err := peerDiscoveryUpdate(discoveryEndpoint, token, name.String(), nickName, addresses) checkFatal(err) + if !ipamConfig.HasMode() { + ipamConfig.PeerCount = len(peers) + count + } peers = append(peers, discoveredPeers...) } else if peers, err = router.InitialPeers(resume, peers); err != nil { Log.Fatal("Unable to get initial peer set: ", err)