| package main |
| |
| import ( |
| gocontext "context" |
| "runtime" |
| |
| "google.golang.org/grpc" |
| "google.golang.org/grpc/codes" |
| |
| containersapi "github.com/containerd/containerd/api/services/containers" |
| "github.com/containerd/containerd/api/services/execution" |
| "github.com/pkg/errors" |
| "github.com/urfave/cli" |
| ) |
| |
| var deleteCommand = cli.Command{ |
| Name: "delete", |
| Usage: "delete an existing container", |
| ArgsUsage: "CONTAINER", |
| Action: func(context *cli.Context) error { |
| containers, err := getContainersService(context) |
| if err != nil { |
| return err |
| } |
| tasks, err := getTasksService(context) |
| if err != nil { |
| return err |
| } |
| |
| snapshotter, err := getSnapshotter(context) |
| if err != nil { |
| return err |
| } |
| id := context.Args().First() |
| if id == "" { |
| return errors.New("container id must be provided") |
| } |
| ctx := gocontext.TODO() |
| _, err = containers.Delete(ctx, &containersapi.DeleteContainerRequest{ |
| ID: id, |
| }) |
| if err != nil { |
| return errors.Wrap(err, "failed to delete container") |
| } |
| |
| _, err = tasks.Delete(ctx, &execution.DeleteRequest{ |
| ContainerID: id, |
| }) |
| if err != nil { |
| // Ignore error if task has already been removed, task is |
| // removed by default after run |
| if grpc.Code(errors.Cause(err)) != codes.NotFound { |
| return errors.Wrap(err, "failed to task container") |
| } |
| } |
| |
| if runtime.GOOS != "windows" { |
| if err := snapshotter.Remove(ctx, id); err != nil { |
| return errors.Wrapf(err, "failed to remove snapshot %q", id) |
| } |
| } |
| |
| return nil |
| }, |
| } |