From 235ddbdc7ef050af2416084b2423d65b898cb33e Mon Sep 17 00:00:00 2001 From: Michael Crosby Date: Fri, 14 Sep 2018 21:39:18 -0400 Subject: [PATCH] Add labels for peers Signed-off-by: Michael Crosby --- config.go | 4 +++- delegate.go | 19 +++++++++++-------- peers.go | 8 +++++--- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/config.go b/config.go index 8b67529..b5305fb 100644 --- a/config.go +++ b/config.go @@ -37,6 +37,8 @@ type Config struct { Peers []string // Debug output for memberlist Debug bool + // Labels for the peer + Labels map[string]string } func (a *Agent) Config() *Config { @@ -57,7 +59,7 @@ func (cfg *Config) memberListConfig(peerUpdateChan chan bool, nodeEventChan chan } mc.Name = cfg.NodeName - mc.Delegate = NewAgentDelegate(cfg.NodeName, cfg.Address, peerUpdateChan, nodeEventChan) + mc.Delegate = NewAgentDelegate(cfg.NodeName, cfg.Address, cfg.Labels, peerUpdateChan, nodeEventChan) mc.Events = NewEventHandler(nodeEventChan) if !cfg.Debug { diff --git a/delegate.go b/delegate.go index 73cffbf..3f178ee 100644 --- a/delegate.go +++ b/delegate.go @@ -8,19 +8,21 @@ import ( ) type agentDelegate struct { - Name string - Addr string - Updated time.Time - Peers map[string]*PeerAgent + PeerAgent + Peers map[string]*PeerAgent `json:"peers"` + updateChan chan bool nodeEventChan chan *NodeEvent } // NewAgentDelegate is the agent delegate used to handle cluster events -func NewAgentDelegate(name, addr string, updateCh chan bool, nodeEventCh chan *NodeEvent) *agentDelegate { +func NewAgentDelegate(name, addr string, labels map[string]string, updateCh chan bool, nodeEventCh chan *NodeEvent) *agentDelegate { agent := &agentDelegate{ - Name: name, - Addr: addr, + PeerAgent: PeerAgent{ + Name: name, + Addr: addr, + Labels: labels, + }, Peers: make(map[string]*PeerAgent), updateChan: updateCh, nodeEventChan: nodeEventCh, @@ -83,7 +85,8 @@ func (d *agentDelegate) MergeRemoteState(buf []byte, join bool) { d.Peers[remoteAgent.Name] = &PeerAgent{ Name: remoteAgent.Name, Addr: remoteAgent.Addr, - Updated: time.Now(), + Updated: d.Updated, + Labels: remoteAgent.Labels, } // notify update d.updateChan <- true diff --git a/peers.go b/peers.go index d41647a..6479c78 100644 --- a/peers.go +++ b/peers.go @@ -7,9 +7,10 @@ import ( // PeerAgent is the peer information for an agent in the cluster including name and GRPC address type PeerAgent struct { - Name string - Addr string - Updated time.Time + Name string `json:"name"` + Addr string `json:"addr"` + Updated time.Time `json:"updated"` + Labels map[string]string `json:"labels"` } // Peers returns all known peers in the cluster @@ -36,5 +37,6 @@ func (a *Agent) LocalNode() (*PeerAgent, error) { Name: a.config.NodeName, Addr: a.config.Address, Updated: time.Now(), + Labels: a.config.Labels, }, nil }