69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
 | 
						|
	"google.golang.org/grpc"
 | 
						|
	"google.golang.org/grpc/codes"
 | 
						|
 | 
						|
	contentapi "github.com/containerd/containerd/api/services/content"
 | 
						|
	"github.com/containerd/containerd/log"
 | 
						|
	digest "github.com/opencontainers/go-digest"
 | 
						|
	"github.com/urfave/cli"
 | 
						|
)
 | 
						|
 | 
						|
var deleteCommand = cli.Command{
 | 
						|
	Name:      "delete",
 | 
						|
	Aliases:   []string{"del", "remove", "rm"},
 | 
						|
	Usage:     "permanently delete one or more blobs.",
 | 
						|
	ArgsUsage: "[flags] [<digest>, ...]",
 | 
						|
	Description: `Delete one or more blobs permanently. Successfully deleted
 | 
						|
	blobs are printed to stdout.`,
 | 
						|
	Flags: []cli.Flag{},
 | 
						|
	Action: func(context *cli.Context) error {
 | 
						|
		var (
 | 
						|
			args      = []string(context.Args())
 | 
						|
			exitError error
 | 
						|
		)
 | 
						|
		ctx, cancel := appContext()
 | 
						|
		defer cancel()
 | 
						|
 | 
						|
		conn, err := connectGRPC(context)
 | 
						|
		if err != nil {
 | 
						|
			return err
 | 
						|
		}
 | 
						|
 | 
						|
		client := contentapi.NewContentClient(conn)
 | 
						|
 | 
						|
		for _, arg := range args {
 | 
						|
			dgst, err := digest.Parse(arg)
 | 
						|
			if err != nil {
 | 
						|
				if exitError == nil {
 | 
						|
					exitError = err
 | 
						|
				}
 | 
						|
				log.G(ctx).WithError(err).Errorf("could not delete %v", dgst)
 | 
						|
				continue
 | 
						|
			}
 | 
						|
 | 
						|
			if _, err := client.Delete(ctx, &contentapi.DeleteContentRequest{
 | 
						|
				Digest: dgst,
 | 
						|
			}); err != nil {
 | 
						|
				switch grpc.Code(err) {
 | 
						|
				case codes.NotFound:
 | 
						|
					// if it is already deleted, ignore!
 | 
						|
				default:
 | 
						|
					if exitError == nil {
 | 
						|
						exitError = err
 | 
						|
					}
 | 
						|
					log.G(ctx).WithError(err).Errorf("could not delete %v", dgst)
 | 
						|
				}
 | 
						|
				continue
 | 
						|
			}
 | 
						|
 | 
						|
			fmt.Println(dgst)
 | 
						|
		}
 | 
						|
 | 
						|
		return exitError
 | 
						|
	},
 | 
						|
}
 |