@@ -16,23 +16,40 @@ type idAndError struct {
16
16
err error
17
17
}
18
18
19
- func killWorker (ch <- chan string , errCh chan <- idAndError , wg * sync.WaitGroup ) {
19
+ func killFuncPct (id string ) error {
20
+ return pve .StopCmd (id ).Run ()
21
+ }
22
+
23
+ func killFuncCgroup (id string ) error {
24
+ return cgroup .KillLXC (id )
25
+ }
26
+
27
+ var killModes = map [string ]func (string ) error {
28
+ "pct" : killFuncPct ,
29
+ "cgroup" : killFuncCgroup ,
30
+ }
31
+
32
+ func killWorker (killFunc func (string ) error , ch <- chan string , errCh chan <- idAndError , wg * sync.WaitGroup ) {
20
33
defer wg .Done ()
21
34
for id := range ch {
22
- cmd := pve .Stop (id )
23
- if err := cmd .Run (); err != nil {
35
+ if err := killFunc (id ); err != nil {
24
36
errCh <- idAndError {id , err }
25
37
}
26
38
}
27
39
}
28
40
29
- func killallMain (out io.Writer , n int , minID int ) (err error ) {
41
+ func killallMain (out io.Writer , killMode string , n int , minID int ) (err error ) {
42
+ killFunc , ok := killModes [killMode ]
43
+ if ! ok {
44
+ return fmt .Errorf ("invalid kill mode: %s" , killMode )
45
+ }
46
+
30
47
ch := make (chan string )
31
48
chErr := make (chan idAndError )
32
49
wg := & sync.WaitGroup {}
33
50
wg .Add (n )
34
51
for i := 0 ; i < n ; i ++ {
35
- go killWorker (ch , chErr , wg )
52
+ go killWorker (killFunc , ch , chErr , wg )
36
53
}
37
54
hasError := false
38
55
go func () {
@@ -74,11 +91,12 @@ func MakeCmd() *cobra.Command {
74
91
Args : cobra .NoArgs ,
75
92
}
76
93
flags := cmd .Flags ()
94
+ pM := flags .StringP ("mode" , "m" , "pct" , "kill mode (pct or cgroup)" )
77
95
pN := flags .IntP ("n" , "n" , 5 , "max number of parallel killing containers" )
78
- pS := flags .IntP ("min " , "m " , 1000 , "minimum ID of containers to kill" )
96
+ pS := flags .IntP ("start " , "s " , 1000 , "starting ( minimum) ID of containers to kill" )
79
97
80
98
cmd .RunE = func (cmd * cobra.Command , args []string ) error {
81
- return killallMain (cmd .OutOrStderr (), * pN , * pS )
99
+ return killallMain (cmd .OutOrStderr (), * pM , * pN , * pS )
82
100
}
83
101
return cmd
84
102
}
0 commit comments