mirror of https://github.com/k3s-io/k3s
Fix panic checking name of uninitialized etcd member
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>pull/4842/head
parent
046961c4c6
commit
5641f9b328
|
@ -355,32 +355,43 @@ 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 {
|
||||
logrus.Errorf("Failed to remove etcd name file %s: %v", nameFile, err)
|
||||
}
|
||||
return errors.New("duplicate node name found, please use a unique name for this node")
|
||||
}
|
||||
for _, peer := range member.PeerURLs {
|
||||
u, err := url.Parse(peer)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// An uninitialized member won't have a name
|
||||
if u.Hostname() == e.address && (member.Name == e.name || member.Name == "") {
|
||||
add = false
|
||||
}
|
||||
// An uninitialized joining member won't have a name; if it has our
|
||||
// address it must be us.
|
||||
if member.Name == "" && u.Hostname() == e.address {
|
||||
member.Name = e.name
|
||||
}
|
||||
|
||||
// If we're already in the cluster, don't try to add ourselves.
|
||||
if member.Name == e.name && u.Hostname() == e.address {
|
||||
add = false
|
||||
}
|
||||
|
||||
if len(member.PeerURLs) > 0 {
|
||||
cluster = append(cluster, fmt.Sprintf("%s=%s", member.Name, member.PeerURLs[0]))
|
||||
}
|
||||
}
|
||||
|
||||
// Try to get the node name from the member name
|
||||
memberNodeName := member.Name
|
||||
if lastHyphen := strings.LastIndex(member.Name, "-"); lastHyphen > 1 {
|
||||
memberNodeName = member.Name[:lastHyphen]
|
||||
}
|
||||
|
||||
// Make sure there's not already a member in the cluster with a duplicate node name
|
||||
if member.Name != e.name && memberNodeName == e.config.ServerNodeName {
|
||||
// make sure to remove the name file if a duplicate node name is used, so that we
|
||||
// generate a new member name when our node name is fixed.
|
||||
nameFile := nameFile(e.config)
|
||||
if err := os.Remove(nameFile); err != nil {
|
||||
logrus.Errorf("Failed to remove etcd name file %s: %v", nameFile, err)
|
||||
}
|
||||
return errors.New("duplicate node name found, please use a unique name for this node")
|
||||
}
|
||||
}
|
||||
|
||||
if add {
|
||||
|
|
Loading…
Reference in New Issue