@@ -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
},
196
198
Action : func (context * cli.Context ) error {
197
199
var err error
@@ -205,6 +207,8 @@ var listPodSandboxCommand = cli.Command{
205
207
verbose : context .Bool ("verbose" ),
206
208
quiet : context .Bool ("quiet" ),
207
209
output : context .String ("output" ),
210
+ latest : context .Bool ("latest" ),
211
+ last : context .Int ("last" ),
208
212
}
209
213
opts .labels , err = parseLabelStringSlice (context .StringSlice ("label" ))
210
214
if err != nil {
@@ -396,7 +400,8 @@ func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
396
400
if err != nil {
397
401
return err
398
402
}
399
- sort .Sort (sandboxBySort (r .Items ))
403
+ sort .Sort (sandboxByCreated (r .GetItems ()))
404
+ r .Items = getSandboxesList (r .GetItems (), opts )
400
405
401
406
switch opts .output {
402
407
case "json" :
@@ -459,3 +464,21 @@ func ListPodSandboxes(client pb.RuntimeServiceClient, opts listOptions) error {
459
464
w .Flush ()
460
465
return nil
461
466
}
467
+
468
+ func getSandboxesList (sandboxesList []* pb.PodSandbox , opts listOptions ) []* pb.PodSandbox {
469
+ n := len (sandboxesList )
470
+ if opts .latest {
471
+ n = 1
472
+ }
473
+ if opts .last > 0 {
474
+ n = opts .last
475
+ }
476
+ n = func (a , b int ) int {
477
+ if a < b {
478
+ return a
479
+ }
480
+ return b
481
+ }(n , len (sandboxesList ))
482
+
483
+ return sandboxesList [:n ]
484
+ }
0 commit comments