1717package tasks
1818
1919import (
20+ gocontext "context"
21+
2022 "github.com/containerd/containerd"
2123 "github.com/containerd/containerd/cio"
2224 "github.com/containerd/containerd/cmd/ctr/commands"
25+ "github.com/containerd/containerd/log"
2326 "github.com/urfave/cli"
2427)
2528
2629var deleteCommand = cli.Command {
2730 Name : "delete" ,
28- Usage : "[flags] delete a task" ,
29- ArgsUsage : "CONTAINER" ,
31+ Usage : "delete one or more tasks" ,
32+ ArgsUsage : "CONTAINER [CONTAINER, ...]" ,
33+ Aliases : []string {"rm" },
3034 Flags : []cli.Flag {
3135 cli.BoolFlag {
3236 Name : "force, f" ,
@@ -47,19 +51,16 @@ var deleteCommand = cli.Command{
4751 return err
4852 }
4953 defer cancel ()
50- container , err := client .LoadContainer (ctx , context .Args ().First ())
51- if err != nil {
52- return err
53- }
54- task , err := container .Task (ctx , cio .Load )
55- if err != nil {
56- return err
57- }
5854 var opts []containerd.ProcessDeleteOpts
5955 if force {
6056 opts = append (opts , containerd .WithProcessKill )
6157 }
58+ var exitErr error
6259 if execID != "" {
60+ task , err := loadTask (ctx , client , context .Args ().First ())
61+ if err != nil {
62+ return err
63+ }
6364 p , err := task .LoadProcess (ctx , execID , nil )
6465 if err != nil {
6566 return err
@@ -72,14 +73,40 @@ var deleteCommand = cli.Command{
7273 return cli .NewExitError ("" , int (ec ))
7374 }
7475 } else {
75- status , err := task .Delete (ctx , opts ... )
76- if err != nil {
77- return err
78- }
79- if ec := status .ExitCode (); ec != 0 {
80- return cli .NewExitError ("" , int (ec ))
76+ for _ , target := range context .Args () {
77+ task , err := loadTask (ctx , client , target )
78+ if err != nil {
79+ if exitErr == nil {
80+ exitErr = err
81+ }
82+ log .G (ctx ).WithError (err ).Errorf ("failed to load task from %v" , target )
83+ continue
84+ }
85+ status , err := task .Delete (ctx , opts ... )
86+ if err != nil {
87+ if exitErr == nil {
88+ exitErr = err
89+ }
90+ log .G (ctx ).WithError (err ).Errorf ("unable to delete %v" , task .ID ())
91+ continue
92+ }
93+ if ec := status .ExitCode (); ec != 0 {
94+ log .G (ctx ).Warnf ("task %v exit with non-zero exit code %v" , task .ID (), int (ec ))
95+ }
8196 }
8297 }
83- return nil
98+ return exitErr
8499 },
85100}
101+
102+ func loadTask (ctx gocontext.Context , client * containerd.Client , containerID string ) (containerd.Task , error ) {
103+ container , err := client .LoadContainer (ctx , containerID )
104+ if err != nil {
105+ return nil , err
106+ }
107+ task , err := container .Task (ctx , cio .Load )
108+ if err != nil {
109+ return nil , err
110+ }
111+ return task , nil
112+ }
0 commit comments