From a031b83a09a8628435317a03f199cdc18b78262f Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Wed, 1 Nov 2017 11:24:59 -0400 Subject: Initial checkin from CRI-O repo Signed-off-by: Matthew Heon --- server/image_status.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 server/image_status.go (limited to 'server/image_status.go') diff --git a/server/image_status.go b/server/image_status.go new file mode 100644 index 000000000..5571c3023 --- /dev/null +++ b/server/image_status.go @@ -0,0 +1,53 @@ +package server + +import ( + "fmt" + "strings" + + "github.com/containers/storage" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "golang.org/x/net/context" + pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime" +) + +// ImageStatus returns the status of the image. +func (s *Server) ImageStatus(ctx context.Context, req *pb.ImageStatusRequest) (*pb.ImageStatusResponse, error) { + logrus.Debugf("ImageStatusRequest: %+v", req) + image := "" + img := req.GetImage() + if img != nil { + image = img.Image + } + if image == "" { + return nil, fmt.Errorf("no image specified") + } + 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 + } + } + // match just the first registry as that's what kube meant + image = images[0] + status, err := s.StorageImageServer().ImageStatus(s.ImageContext(), image) + if err != nil { + if errors.Cause(err) == storage.ErrImageUnknown { + return &pb.ImageStatusResponse{}, nil + } + return nil, err + } + resp := &pb.ImageStatusResponse{ + Image: &pb.Image{ + Id: status.ID, + RepoTags: status.Names, + RepoDigests: status.Digests, + Size_: *status.Size, + }, + } + logrus.Debugf("ImageStatusResponse: %+v", resp) + return resp, nil +} -- cgit v1.2.3-54-g00ecf