ff7bbb4f0d
Add an UntagImage() method to pkg/storage/ImageServer, which will check if the passed-in NameOrID is a name. If so, it merely removes that name from the image, removing the image only if it was the last name that the image had. If the NameOrID is an image ID, the image is removed, as RemoveImage() does. Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/kubernetes-incubator/cri-o/pkg/storage"
|
|
"github.com/sirupsen/logrus"
|
|
"golang.org/x/net/context"
|
|
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
|
|
)
|
|
|
|
// RemoveImage removes the image.
|
|
func (s *Server) RemoveImage(ctx context.Context, req *pb.RemoveImageRequest) (resp *pb.RemoveImageResponse, err error) {
|
|
const operation = "remove_image"
|
|
defer func() {
|
|
recordOperation(operation, time.Now())
|
|
recordError(operation, err)
|
|
}()
|
|
|
|
logrus.Debugf("RemoveImageRequest: %+v", req)
|
|
image := ""
|
|
img := req.GetImage()
|
|
if img != nil {
|
|
image = img.Image
|
|
}
|
|
if image == "" {
|
|
return nil, fmt.Errorf("no image specified")
|
|
}
|
|
var (
|
|
images []string
|
|
deleted bool
|
|
)
|
|
images, err = s.StorageImageServer().ResolveNames(image)
|
|
if err != nil {
|
|
if err == storage.ErrCannotParseImageID {
|
|
images = append(images, image)
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
for _, img := range images {
|
|
err = s.StorageImageServer().UntagImage(s.ImageContext(), img)
|
|
if err != nil {
|
|
logrus.Debugf("error deleting image %s: %v", img, err)
|
|
continue
|
|
}
|
|
deleted = true
|
|
break
|
|
}
|
|
if !deleted && err != nil {
|
|
return nil, err
|
|
}
|
|
resp = &pb.RemoveImageResponse{}
|
|
logrus.Debugf("RemoveImageResponse: %+v", resp)
|
|
return resp, nil
|
|
}
|