diff --git a/pkg/cli/server/server.go b/pkg/cli/server/server.go index c76fe6ee2c3..efc77a20d13 100644 --- a/pkg/cli/server/server.go +++ b/pkg/cli/server/server.go @@ -223,6 +223,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont if err != nil { return err } + serverConfig.ControlConfig.ServerNodeName = nodeName serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, "127.0.0.1", "localhost", nodeName) for _, ip := range nodeIPs { serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, ip.String()) diff --git a/pkg/daemons/config/types.go b/pkg/daemons/config/types.go index 24cd33a3b41..69a822d76ae 100644 --- a/pkg/daemons/config/types.go +++ b/pkg/daemons/config/types.go @@ -168,6 +168,7 @@ type Control struct { EtcdS3Region string EtcdS3Folder string EtcdS3Insecure bool + ServerNodeName string BindAddress string SANs []string diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index 4f32137db45..9c98d064a18 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -329,6 +329,16 @@ func (e *ETCD) join(ctx context.Context, clientAccessInfo *clientaccess.Info) er } for _, member := range members.Members { + lastHyphen := strings.LastIndex(member.Name, "-") + memberNodeName := member.Name[:lastHyphen] + if memberNodeName == e.config.ServerNodeName { + // make sure to remove the name file if a duplicate node name is used + nameFile := nameFile(e.config) + if err := os.Remove(nameFile); err != nil { + return err + } + return errors.New("Failed to join etcd cluster due to duplicate node names, please use unique node name for the server") + } for _, peer := range member.PeerURLs { u, err := url.Parse(peer) if err != nil { @@ -414,11 +424,7 @@ func (e *ETCD) setName(force bool) error { fileName := nameFile(e.config) data, err := ioutil.ReadFile(fileName) if os.IsNotExist(err) || force { - h, err := os.Hostname() - if err != nil { - return err - } - e.name = strings.SplitN(h, ".", 2)[0] + "-" + uuid.New().String()[:8] + e.name = e.config.ServerNodeName + "-" + uuid.New().String()[:8] if err := os.MkdirAll(filepath.Dir(fileName), 0700); err != nil { return err }