From 5251ed3128dd5e21cac5af4c9ec4ac2838261e11 Mon Sep 17 00:00:00 2001
From: Matt DeBoer <matt.deboer@gettyimages.com>
Date: Thu, 23 Mar 2017 10:27:22 -0700
Subject: [PATCH] still join existing, even if we are already a member

---
 pkg/discovery/discovery.go | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/pkg/discovery/discovery.go b/pkg/discovery/discovery.go
index 6f58bab..d39efb3 100644
--- a/pkg/discovery/discovery.go
+++ b/pkg/discovery/discovery.go
@@ -109,7 +109,7 @@ func (d *Discovery) DiscoverEnvironment() (map[string]string, error) {
 			log.Debugf("Local master: %#v", *localMaster)
 		}
 		// this instance is an expected master
-		if len(currentMembers) > 0 && !containsMember(currentMembers, *localMaster) && uptime >= d.MinimumUptimeToJoin {
+		if len(currentMembers) > 0 && uptime >= d.MinimumUptimeToJoin {
 			// there is an existing cluster
 			if err = d.assertSaneClusterState(expectedMembers, currentMembers); err != nil {
 				log.Fatal(err)
@@ -119,8 +119,10 @@ func (d *Discovery) DiscoverEnvironment() (map[string]string, error) {
 			log.Infof("Joining existing cluster as a master")
 			// TODO: what if we encounter a state where not of the expected masters are
 			// members of the current cluster?
-			if err := d.joinExistingCluster(membersAPI, expectedMembers, localMaster); err != nil {
-				log.Fatal(err)
+			if !containsMember(currentMembers, *localMaster) {
+				if err := d.joinExistingCluster(membersAPI, expectedMembers, localMaster); err != nil {
+					log.Fatal(err)
+				}
 			}
 			environment["ETCD_INITIAL_CLUSTER_STATE"] = "existing"
 		} else {