Update the local VTEP in peerdb on receiving self discovery

Signed-off-by: Santhosh Manohar <santhosh@docker.com>
This commit is contained in:
Santhosh Manohar 2017-02-10 14:24:24 -08:00
parent 1ee6e5b30b
commit 4208a2f75a
2 changed files with 16 additions and 0 deletions

View File

@ -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 {

View File

@ -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
})
}