Unverified Commit 22f7f1c4 authored by Hussein Galal's avatar Hussein Galal Committed by GitHub

Make sure there are no duplicates in etcd member list (#4025) (#4213)

* Make sure there are no duplicates in etcd member list Signed-off-by: 's avatargalal-hussein <hussein.galal.ahmed.11@gmail.com> * fix node names with hyphens Signed-off-by: 's avatargalal-hussein <hussein.galal.ahmed.11@gmail.com> * use full server name for etcd node name Signed-off-by: 's avatargalal-hussein <hussein.galal.ahmed.11@gmail.com>
parent e7bf7b14
...@@ -225,6 +225,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont ...@@ -225,6 +225,7 @@ func run(app *cli.Context, cfg *cmds.Server, leaderControllers server.CustomCont
if err != nil { if err != nil {
return err return err
} }
serverConfig.ControlConfig.ServerNodeName = nodeName
serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, "127.0.0.1", "localhost", nodeName) serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, "127.0.0.1", "localhost", nodeName)
for _, ip := range nodeIPs { for _, ip := range nodeIPs {
serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, ip.String()) serverConfig.ControlConfig.SANs = append(serverConfig.ControlConfig.SANs, ip.String())
......
...@@ -166,6 +166,7 @@ type Control struct { ...@@ -166,6 +166,7 @@ type Control struct {
EtcdS3BucketName string EtcdS3BucketName string
EtcdS3Region string EtcdS3Region string
EtcdS3Folder string EtcdS3Folder string
ServerNodeName string
BindAddress string BindAddress string
SANs []string SANs []string
......
...@@ -323,6 +323,16 @@ func (e *ETCD) join(ctx context.Context, clientAccessInfo *clientaccess.Info) er ...@@ -323,6 +323,16 @@ func (e *ETCD) join(ctx context.Context, clientAccessInfo *clientaccess.Info) er
} }
for _, member := range members.Members { 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 { for _, peer := range member.PeerURLs {
u, err := url.Parse(peer) u, err := url.Parse(peer)
if err != nil { if err != nil {
...@@ -408,11 +418,7 @@ func (e *ETCD) setName(force bool) error { ...@@ -408,11 +418,7 @@ func (e *ETCD) setName(force bool) error {
fileName := nameFile(e.config) fileName := nameFile(e.config)
data, err := ioutil.ReadFile(fileName) data, err := ioutil.ReadFile(fileName)
if os.IsNotExist(err) || force { if os.IsNotExist(err) || force {
h, err := os.Hostname() e.name = e.config.ServerNodeName + "-" + uuid.New().String()[:8]
if err != nil {
return err
}
e.name = strings.SplitN(h, ".", 2)[0] + "-" + uuid.New().String()[:8]
if err := os.MkdirAll(filepath.Dir(fileName), 0700); err != nil { if err := os.MkdirAll(filepath.Dir(fileName), 0700); err != nil {
return err return err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment