From 4208a2f75a2dfa7a2a1cd62a63539a7175bdd270 Mon Sep 17 00:00:00 2001 From: Santhosh Manohar Date: Fri, 10 Feb 2017 14:24:24 -0800 Subject: [PATCH] Update the local VTEP in peerdb on receiving self discovery Signed-off-by: Santhosh Manohar --- libnetwork/drivers/overlay/overlay.go | 7 +++++++ libnetwork/drivers/overlay/peerdb.go | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/libnetwork/drivers/overlay/overlay.go b/libnetwork/drivers/overlay/overlay.go index 7f20840db2..88e1010c43 100644 --- a/libnetwork/drivers/overlay/overlay.go +++ b/libnetwork/drivers/overlay/overlay.go @@ -48,6 +48,7 @@ type driver struct { vxlanIdm *idm.Idm once sync.Once joinOnce sync.Once + localJoinOnce sync.Once keys []*key sync.Mutex } @@ -241,6 +242,12 @@ func (d *driver) nodeJoin(advertiseAddress, bindAddress string, self bool) { d.bindAddress = bindAddress d.Unlock() + // If containers are already running on this network update the + // advertiseaddress in the peerDB + d.localJoinOnce.Do(func() { + d.peerDBUpdateSelf() + }) + // If there is no cluster store there is no need to start serf. if d.store != nil { if err := validateSelf(advertiseAddress); err != nil { diff --git a/libnetwork/drivers/overlay/peerdb.go b/libnetwork/drivers/overlay/peerdb.go index 92817a1a98..adc370ff0f 100644 --- a/libnetwork/drivers/overlay/peerdb.go +++ b/libnetwork/drivers/overlay/peerdb.go @@ -367,3 +367,12 @@ func (d *driver) pushLocalDb() { return false }) } + +func (d *driver) peerDBUpdateSelf() { + d.peerDbWalk(func(nid string, pkey *peerKey, pEntry *peerEntry) bool { + if pEntry.isLocal { + pEntry.vtep = net.ParseIP(d.advertiseAddress) + } + return false + }) +}