@@ -149,16 +149,36 @@ func CreateStackedEtcdStaticPodManifestFile(client clientset.Interface, manifest
149
149
return err
150
150
}
151
151
152
- // notifies the other members of the etcd cluster about the joining member
153
152
etcdPeerAddress := etcdutil .GetPeerURL (endpoint )
154
153
155
- klog .V (1 ).Infof ( "Adding etcd member: %s" , etcdPeerAddress )
156
- initialCluster , err := etcdClient .AddMember ( nodeName , etcdPeerAddress )
154
+ klog .V (1 ).Infoln ( "[ etcd] Getting the list of existing members" )
155
+ initialCluster , err := etcdClient .ListMembers ( )
157
156
if err != nil {
158
157
return err
159
158
}
160
- fmt .Println ("[etcd] Announced new etcd member joining to the existing etcd cluster" )
161
- klog .V (1 ).Infof ("Updated etcd member list: %v" , initialCluster )
159
+
160
+ // only add the new member if it doesn't already exists
161
+ var exists bool
162
+ klog .V (1 ).Infof ("[etcd] Checking if the etcd member already exists: %s" , etcdPeerAddress )
163
+ for _ , member := range initialCluster {
164
+ if member .PeerURL == etcdPeerAddress {
165
+ exists = true
166
+ break
167
+ }
168
+ }
169
+
170
+ if exists {
171
+ klog .V (1 ).Infof ("[etcd] Etcd member already exists: %s" , endpoint )
172
+ } else {
173
+ klog .V (1 ).Infof ("[etcd] Adding etcd member: %s" , etcdPeerAddress )
174
+ initialCluster , err = etcdClient .AddMember (nodeName , etcdPeerAddress )
175
+ if err != nil {
176
+ return err
177
+ }
178
+
179
+ fmt .Println ("[etcd] Announced new etcd member joining to the existing etcd cluster" )
180
+ klog .V (1 ).Infof ("Updated etcd member list: %v" , initialCluster )
181
+ }
162
182
163
183
fmt .Printf ("[etcd] Creating static Pod manifest for %q\n " , kubeadmconstants .Etcd )
164
184
0 commit comments