@@ -3,6 +3,7 @@ package k8sutils
33import (
44 "context"
55 "fmt"
6+ "net"
67 "strconv"
78 "strings"
89
@@ -33,13 +34,7 @@ func ReshardRedisCluster(ctx context.Context, client kubernetes.Interface, cr *r
3334 Namespace : cr .Namespace ,
3435 }
3536 cmd = []string {"redis-cli" , "--cluster" , "reshard" }
36-
37- if * cr .Spec .ClusterVersion == "v7" {
38- cmd = append (cmd , getRedisHostname (transferPOD , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
39- } else {
40- cmd = append (cmd , getRedisServerAddress (ctx , client , transferPOD , * cr .Spec .Port ))
41- }
42-
37+ cmd = append (cmd , getEndpoint (ctx , client , cr , transferPOD ))
4338 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
4439 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
4540 if err != nil {
@@ -75,7 +70,6 @@ func ReshardRedisCluster(ctx context.Context, client kubernetes.Interface, cr *r
7570
7671 cmd = append (cmd , "--cluster-yes" )
7772
78- log .FromContext (ctx ).V (1 ).Info ("redis cluster reshard command is" , "Command" , cmd )
7973 log .FromContext (ctx ).Info (fmt .Sprintf ("transferring %s slots from shard %d to shard %d" , slots , shardIdx , transferNodeIdx ))
8074 executeCommand (ctx , client , cr , cmd , transferNodeName )
8175 log .FromContext (ctx ).Info (fmt .Sprintf ("transferring %s slots from shard %d to shard %d completed" , slots , shardIdx , transferNodeIdx ))
@@ -142,15 +136,8 @@ func RebalanceRedisClusterEmptyMasters(ctx context.Context, client kubernetes.In
142136 Namespace : cr .Namespace ,
143137 }
144138 cmd = []string {"redis-cli" , "--cluster" , "rebalance" }
145-
146- if * cr .Spec .ClusterVersion == "v7" {
147- cmd = append (cmd , getRedisHostname (pod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
148- } else {
149- cmd = append (cmd , getRedisServerAddress (ctx , client , pod , * cr .Spec .Port ))
150- }
151-
139+ cmd = append (cmd , getEndpoint (ctx , client , cr , pod ))
152140 cmd = append (cmd , "--cluster-use-empty-masters" )
153-
154141 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
155142 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
156143 if err != nil {
@@ -162,7 +149,6 @@ func RebalanceRedisClusterEmptyMasters(ctx context.Context, client kubernetes.In
162149
163150 cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , cr .Name + "-leader-0" )... )
164151
165- log .FromContext (ctx ).V (1 ).Info ("Redis cluster rebalance command is" , "Command" , cmd )
166152 executeCommand (ctx , client , cr , cmd , cr .Name + "-leader-1" )
167153}
168154
@@ -196,13 +182,7 @@ func RebalanceRedisCluster(ctx context.Context, client kubernetes.Interface, cr
196182 Namespace : cr .Namespace ,
197183 }
198184 cmd = []string {"redis-cli" , "--cluster" , "rebalance" }
199-
200- if * cr .Spec .ClusterVersion == "v7" {
201- cmd = append (cmd , getRedisHostname (pod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
202- } else {
203- cmd = append (cmd , getRedisServerAddress (ctx , client , pod , * cr .Spec .Port ))
204- }
205-
185+ cmd = append (cmd , getEndpoint (ctx , client , cr , pod ))
206186 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
207187 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
208188 if err != nil {
@@ -214,15 +194,13 @@ func RebalanceRedisCluster(ctx context.Context, client kubernetes.Interface, cr
214194
215195 cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , cr .Name + "-leader-0" )... )
216196
217- log .FromContext (ctx ).V (1 ).Info ("Redis cluster rebalance command is" , "Command" , cmd )
218197 executeCommand (ctx , client , cr , cmd , cr .Name + "-leader-1" )
219198}
220199
221200// Add redis cluster node would add a node to the existing redis cluster using redis-cli
222201func AddRedisNodeToCluster (ctx context.Context , client kubernetes.Interface , cr * rcvb2.RedisCluster ) {
223- var cmd []string
202+ cmd := []string { "redis-cli" , "--cluster" , "add-node" }
224203 activeRedisNode := CheckRedisNodeCount (ctx , client , cr , "leader" )
225-
226204 newPod := RedisDetails {
227205 PodName : cr .Name + "-leader-" + strconv .Itoa (int (activeRedisNode )),
228206 Namespace : cr .Namespace ,
@@ -231,17 +209,8 @@ func AddRedisNodeToCluster(ctx context.Context, client kubernetes.Interface, cr
231209 PodName : cr .Name + "-leader-0" ,
232210 Namespace : cr .Namespace ,
233211 }
234-
235- cmd = []string {"redis-cli" , "--cluster" , "add-node" }
236-
237- if * cr .Spec .ClusterVersion == "v7" {
238- cmd = append (cmd , getRedisHostname (newPod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
239- cmd = append (cmd , getRedisHostname (existingPod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
240- } else {
241- cmd = append (cmd , getRedisServerAddress (ctx , client , newPod , * cr .Spec .Port ))
242- cmd = append (cmd , getRedisServerAddress (ctx , client , existingPod , * cr .Spec .Port ))
243- }
244-
212+ cmd = append (cmd , getEndpoint (ctx , client , cr , newPod ))
213+ cmd = append (cmd , getEndpoint (ctx , client , cr , existingPod ))
245214 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
246215 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
247216 if err != nil {
@@ -253,7 +222,6 @@ func AddRedisNodeToCluster(ctx context.Context, client kubernetes.Interface, cr
253222
254223 cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , cr .Name + "-leader-0" )... )
255224
256- log .FromContext (ctx ).V (1 ).Info ("Redis cluster add-node command is" , "Command" , cmd )
257225 executeCommand (ctx , client , cr , cmd , cr .Name + "-leader-0" )
258226}
259227
@@ -305,47 +273,25 @@ func RemoveRedisFollowerNodesFromCluster(ctx context.Context, client kubernetes.
305273 followerNodeIDs := getAttachedFollowerNodeIDs (ctx , redisClient , lastLeaderPodNodeID )
306274
307275 cmd = append (cmd , "--cluster" , "del-node" )
308- if * cr .Spec .ClusterVersion == "v7" {
309- cmd = append (cmd , getRedisHostname (existingPod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
310- } else {
311- cmd = append (cmd , getRedisServerAddress (ctx , client , existingPod , * cr .Spec .Port ))
312- }
313-
276+ cmd = append (cmd , getEndpoint (ctx , client , cr , existingPod ))
314277 for _ , followerNodeID := range followerNodeIDs {
315278 cmd = append (cmd , followerNodeID )
316- log .FromContext (ctx ).V (1 ).Info ("Redis cluster follower remove command is" , "Command" , cmd )
317279 executeCommand (ctx , client , cr , cmd , cr .Name + "-leader-0" )
318280 cmd = cmd [:len (cmd )- 1 ]
319281 }
320282}
321283
322284// Remove redis cluster node would remove last node to the existing redis cluster using redis-cli
323285func RemoveRedisNodeFromCluster (ctx context.Context , client kubernetes.Interface , cr * rcvb2.RedisCluster , removePod RedisDetails ) {
324- var cmd []string
325286 redisClient := configureRedisClient (ctx , client , cr , cr .Name + "-leader-0" )
326287 defer redisClient .Close ()
327- // currentRedisCount := CheckRedisNodeCount(ctx, client, cr, "leader")
328-
329288 existingPod := RedisDetails {
330289 PodName : cr .Name + "-leader-0" ,
331290 Namespace : cr .Namespace ,
332291 }
333- //removePod := RedisDetails{
334- // PodName: cr.Name + "-leader-" + strconv.Itoa(int(currentRedisCount)-1),
335- // Namespace: cr.Namespace,
336- //}
337-
338- cmd = []string {"redis-cli" , "--cluster" , "del-node" }
339-
340- if * cr .Spec .ClusterVersion == "v7" {
341- cmd = append (cmd , getRedisHostname (existingPod , cr , "leader" )+ fmt .Sprintf (":%d" , * cr .Spec .Port ))
342- } else {
343- cmd = append (cmd , getRedisServerAddress (ctx , client , existingPod , * cr .Spec .Port ))
344- }
345-
346- removePodNodeID := getRedisNodeID (ctx , client , cr , removePod )
347- cmd = append (cmd , removePodNodeID )
348-
292+ cmd := []string {"redis-cli" , "--cluster" , "del-node" }
293+ cmd = append (cmd , getEndpoint (ctx , client , cr , existingPod ))
294+ cmd = append (cmd , getRedisNodeID (ctx , client , cr , removePod ))
349295 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
350296 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
351297 if err != nil {
@@ -354,13 +300,7 @@ func RemoveRedisNodeFromCluster(ctx context.Context, client kubernetes.Interface
354300 cmd = append (cmd , "-a" )
355301 cmd = append (cmd , pass )
356302 }
357-
358303 cmd = append (cmd , getRedisTLSArgs (cr .Spec .TLS , cr .Name + "-leader-0" )... )
359-
360- log .FromContext (ctx ).V (1 ).Info ("Redis cluster leader remove command is" , "Command" , cmd )
361- if getRedisClusterSlots (ctx , redisClient , removePodNodeID ) != "0" {
362- log .FromContext (ctx ).V (1 ).Info ("Skipping execution remove leader not empty" , "cmd" , cmd )
363- }
364304 executeCommand (ctx , client , cr , cmd , cr .Name + "-leader-0" )
365305}
366306
@@ -399,17 +339,11 @@ func ClusterFailover(ctx context.Context, client kubernetes.Interface, cr *rcvb2
399339 PodName : slavePodName ,
400340 Namespace : cr .Namespace ,
401341 }
402-
403- cmd = []string {"redis-cli" , "-h" }
404-
405- if * cr .Spec .ClusterVersion == "v7" {
406- cmd = append (cmd , getRedisHostname (pod , cr , "leader" ))
407- } else {
408- cmd = append (cmd , getRedisServerIP (ctx , client , pod ))
342+ host , port , err := net .SplitHostPort (getEndpoint (ctx , client , cr , pod ))
343+ if err != nil {
344+ return err
409345 }
410- cmd = append (cmd , "-p" )
411- cmd = append (cmd , strconv .Itoa (* cr .Spec .Port ))
412-
346+ cmd = []string {"redis-cli" , "-h" , host , "-p" , port }
413347 if cr .Spec .KubernetesConfig .ExistingPasswordSecret != nil {
414348 pass , err := getRedisPassword (ctx , client , cr .Namespace , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Name , * cr .Spec .KubernetesConfig .ExistingPasswordSecret .Key )
415349 if err != nil {
0 commit comments