@@ -11,9 +11,19 @@ import (
11
11
"k8s.io/klog/v2"
12
12
)
13
13
14
+ type ModeType string
15
+
16
+ const (
17
+ Node ModeType = "node"
18
+ Pod ModeType = "pod"
19
+ NodeToPod ModeType = "node-to-pod"
20
+ PodToNode ModeType = "pod-to-node"
21
+ )
22
+
14
23
type DoOptions struct {
15
- Namespace string `json:"namespace,omitempty"`
16
- Version string `json:"version,omitempty"`
24
+ Namespace string `json:"namespace,omitempty"`
25
+ Version string `json:"version,omitempty"`
26
+ Mode ModeType `json:"mode,omitempty"`
17
27
18
28
Protocol string `json:"protocol,omitempty"`
19
29
PodWaitTime int `json:"podWaitTime,omitempty"`
@@ -38,33 +48,78 @@ type DoOptions struct {
38
48
ResumeRecord []* PrintCheckData `json:"-"`
39
49
}
40
50
51
+ func (o * DoOptions ) GetEnableHostNetwork (isSrc bool ) bool {
52
+ if isSrc {
53
+ switch o .Mode {
54
+ case Node , NodeToPod :
55
+ return true
56
+ case Pod , PodToNode :
57
+ return false
58
+ }
59
+ } else {
60
+ switch o .Mode {
61
+ case Node , PodToNode :
62
+ return true
63
+ case NodeToPod , Pod :
64
+ return false
65
+ }
66
+ }
67
+ return false
68
+ }
69
+
70
+ func (o * DoOptions ) GetInfo (floater * Floater , isSrc bool ) ([]* FloatInfo , error ) {
71
+ if isSrc {
72
+ switch o .Mode {
73
+ case Node , NodeToPod :
74
+ return floater .GetNodesInfo ()
75
+ case Pod , PodToNode :
76
+ return floater .GetPodInfo ()
77
+ }
78
+ } else {
79
+ switch o .Mode {
80
+ case Node , PodToNode :
81
+ return floater .GetNodesInfo ()
82
+ case NodeToPod , Pod :
83
+ return floater .GetPodInfo ()
84
+ }
85
+ }
86
+ return floater .GetPodInfo ()
87
+ }
88
+
41
89
func (o * DoOptions ) Run () error {
42
90
if err := o .SrcFloater .CreateFloater (); err != nil {
43
91
return err
44
92
}
45
93
46
94
if o .DstKubeConfig != "" {
47
- srcPodInfos , err := o .SrcFloater . GetPodInfo ( )
95
+ srcInfos , err := o .GetInfo ( o . SrcFloater , true )
48
96
if err != nil {
49
97
return fmt .Errorf ("get src cluster podInfos failed: %s" , err )
50
98
}
51
99
52
100
if err = o .DstFloater .CreateFloater (); err != nil {
53
101
return err
54
102
}
55
- var dstPodInfos []* FloatInfo
56
- dstPodInfos , err = o .DstFloater . GetPodInfo ( )
103
+ var dstInfos []* FloatInfo
104
+ dstInfos , err = o .GetInfo ( o . DstFloater , false )
57
105
if err != nil {
58
106
return fmt .Errorf ("get dist cluster podInfos failed: %s" , err )
59
107
}
60
108
61
- PrintResult (o .RunRange (srcPodInfos , dstPodInfos ))
109
+ PrintResult (o .RunRange (srcInfos , dstInfos ))
62
110
} else {
63
- srcPodInfos , err := o .SrcFloater . GetPodInfo ( )
111
+ srcInfos , err := o .GetInfo ( o . SrcFloater , true )
64
112
if err != nil {
65
113
return fmt .Errorf ("get src cluster podInfos failed: %s" , err )
66
114
}
67
- PrintResult (o .RunRange (srcPodInfos , srcPodInfos ))
115
+
116
+ var dstInfos []* FloatInfo
117
+ dstInfos , err = o .GetInfo (o .SrcFloater , false )
118
+ if err != nil {
119
+ return fmt .Errorf ("get dist cluster podInfos failed: %s" , err )
120
+ }
121
+
122
+ PrintResult (o .RunRange (srcInfos , dstInfos ))
68
123
}
69
124
70
125
if o .AutoClean {
@@ -149,7 +204,13 @@ func (o *DoOptions) RunRange(iPodInfos []*FloatInfo, jPodInfos []*FloatInfo) []*
149
204
cmdObj = command .NewCmd (o .Protocol , o .TargetHostToLookup , o .TargetDNSServer )
150
205
} else {
151
206
for _ , jPodInfo := range jPodInfos {
152
- for _ , ip := range jPodInfo .PodIPs {
207
+ targetIPs := jPodInfo .PodIPs
208
+ needWrapper := false
209
+ if len (jPodInfo .NodeIPs ) != 0 {
210
+ targetIPs = jPodInfo .NodeIPs
211
+ needWrapper = true
212
+ }
213
+ for _ , ip := range targetIPs {
153
214
var targetIP string
154
215
var err error
155
216
var cmdResult * command.Result
@@ -163,6 +224,11 @@ func (o *DoOptions) RunRange(iPodInfos []*FloatInfo, jPodInfos []*FloatInfo) []*
163
224
}
164
225
// ToDo RunRange && RunNative func support multiple commands, and the code needs to be optimized
165
226
cmdObj := command .NewCmd (o .Protocol , targetIP , o .Port )
227
+ if needWrapper {
228
+ cmdObj = command.Wrapper {
229
+ Cmd : cmdObj ,
230
+ }
231
+ }
166
232
cmdResult = o .SrcFloater .CommandExec (iPodInfo , cmdObj )
167
233
}
168
234
mutex .Lock ()
0 commit comments