2e5e92730a
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>
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"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) (*pb.RemoveImageResponse, error) {
|
|
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
|
|
err error
|
|
deleted bool
|
|
)
|
|
images, err = s.StorageImageServer().ResolveNames(image)
|
|
if err != nil {
|
|
// This means we got an image ID
|
|
if strings.Contains(err.Error(), "cannot specify 64-byte hexadecimal strings") {
|
|
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
|
|
}
|