@@ -34,18 +34,12 @@ import (
34
34
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
35
35
)
36
36
37
- type sandboxBySort []* pb.PodSandbox
37
+ type sandboxByCreated []* pb.PodSandbox
38
38
39
- func (a sandboxBySort ) Len () int { return len (a ) }
40
- func (a sandboxBySort ) Swap (i , j int ) { a [i ], a [j ] = a [j ], a [i ] }
41
- func (a sandboxBySort ) Less (i , j int ) bool {
42
- if a [i ].Metadata .Namespace != a [j ].Metadata .Namespace {
43
- return a [i ].Metadata .Namespace < a [j ].Metadata .Namespace
44
- }
45
- if a [i ].Metadata .Name != a [j ].Metadata .Name {
46
- return a [i ].Metadata .Name < a [j ].Metadata .Name
47
- }
48
- return a [i ].CreatedAt < a [j ].CreatedAt
39
+ func (a sandboxByCreated ) Len () int { return len (a ) }
40
+ func (a sandboxByCreated ) Swap (i , j int ) { a [i ], a [j ] = a [j ], a [i ] }
41
+ func (a sandboxByCreated ) Less (i , j int ) bool {
42
+ return a [i ].CreatedAt > a [j ].CreatedAt
49
43
}
50
44
51
45
var runPodSandboxCommand = cli.Command {
@@ -172,12 +166,12 @@ var listPodSandboxCommand = cli.Command{
172
166
Usage : "filter by pod sandbox namespace" ,
173
167
},
174
168
cli.StringFlag {
175
- Name : "state,s" ,
169
+ Name : "state, s" ,
176
170
Value : "" ,
177
171
Usage : "filter by pod sandbox state" ,
178
172
},
179
173
cli.StringSliceFlag {
180
- Name : "label,l " ,
174
+ Name : "label" ,
181
175
Usage : "filter by key=value label" ,
182
176
},
183
177
cli.BoolFlag {
@@ -192,6 +186,14 @@ var listPodSandboxCommand = cli.Command{
192
186
Name : "output, o" ,
193
187
Usage : "Output format, One of: json|yaml|table" ,
194
188
},
189
+ cli.BoolFlag {
190
+ Name : "latest, l" ,
191
+ Usage : "Show recently created sandboxes" ,
192
+ },
193
+ cli.IntFlag {
194
+ Name : "last, n" ,
195
+ Usage : "Show last n recently created sandboxes" ,
196
+ },
195
197
cli.BoolFlag {
196
198
Name : "no-trunc" ,
197
199
Usage : "Show output without truncating the ID" ,
@@ -209,6 +211,8 @@ var listPodSandboxCommand = cli.Command{
209
211
verbose : context .Bool ("verbose" ),
210
212
quiet : context .Bool ("quiet" ),
211
213
output : context .String ("output" ),
214
+ latest : context .Bool ("latest" ),
215
+ last : context .Int ("last" ),
212
216
noTrunc : context .Bool ("no-trunc" ),
213
217
}
214
218
opts .labels , err = parseLabelStringSlice (context .StringSlice ("label" ))
@@ -401,7 +405,8 @@ func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
401
405
if err != nil {
402
406
return err
403
407
}
404
- sort .Sort (sandboxBySort (r .Items ))
408
+ sort .Sort (sandboxByCreated (r .GetItems ()))
409
+ r .Items = getSandboxesList (r .GetItems (), opts )
405
410
406
411
switch opts .output {
407
412
case "json" :
@@ -467,3 +472,21 @@ func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
467
472
w .Flush ()
468
473
return nil
469
474
}
475
+
476
+ func getSandboxesList (sandboxesList []* pb.PodSandbox , opts listOptions ) []* pb.PodSandbox {
477
+ n := len (sandboxesList )
478
+ if opts .latest {
479
+ n = 1
480
+ }
481
+ if opts .last > 0 {
482
+ n = opts .last
483
+ }
484
+ n = func (a , b int ) int {
485
+ if a < b {
486
+ return a
487
+ }
488
+ return b
489
+ }(n , len (sandboxesList ))
490
+
491
+ return sandboxesList [:n ]
492
+ }
0 commit comments