Windows snapshotter is not yet implemented Signed-off-by: Derek McGowan <derek@mcgstyle.net>
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
	},
 | 
						|
}
 |