88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
|
package images
|
||
|
|
||
|
import (
|
||
|
imagesapi "github.com/containerd/containerd/api/services/images"
|
||
|
"github.com/containerd/containerd/api/types/descriptor"
|
||
|
"github.com/containerd/containerd/images"
|
||
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||
|
"github.com/pkg/errors"
|
||
|
"google.golang.org/grpc"
|
||
|
"google.golang.org/grpc/codes"
|
||
|
)
|
||
|
|
||
|
func imagesToProto(images []images.Image) []imagesapi.Image {
|
||
|
var imagespb []imagesapi.Image
|
||
|
|
||
|
for _, image := range images {
|
||
|
imagespb = append(imagespb, imageToProto(&image))
|
||
|
}
|
||
|
|
||
|
return imagespb
|
||
|
}
|
||
|
|
||
|
func imagesFromProto(imagespb []imagesapi.Image) []images.Image {
|
||
|
var images []images.Image
|
||
|
|
||
|
for _, image := range imagespb {
|
||
|
images = append(images, imageFromProto(&image))
|
||
|
}
|
||
|
|
||
|
return images
|
||
|
}
|
||
|
|
||
|
func imageToProto(image *images.Image) imagesapi.Image {
|
||
|
return imagesapi.Image{
|
||
|
Name: image.Name,
|
||
|
Target: descToProto(&image.Target),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func imageFromProto(imagepb *imagesapi.Image) images.Image {
|
||
|
return images.Image{
|
||
|
Name: imagepb.Name,
|
||
|
Target: descFromProto(&imagepb.Target),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func descFromProto(desc *descriptor.Descriptor) ocispec.Descriptor {
|
||
|
return ocispec.Descriptor{
|
||
|
MediaType: desc.MediaType,
|
||
|
Size: desc.Size_,
|
||
|
Digest: desc.Digest,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func descToProto(desc *ocispec.Descriptor) descriptor.Descriptor {
|
||
|
return descriptor.Descriptor{
|
||
|
MediaType: desc.MediaType,
|
||
|
Size_: desc.Size,
|
||
|
Digest: desc.Digest,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func rewriteGRPCError(err error) error {
|
||
|
if err == nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
switch grpc.Code(errors.Cause(err)) {
|
||
|
case codes.AlreadyExists:
|
||
|
return images.ErrExists
|
||
|
case codes.NotFound:
|
||
|
return images.ErrNotFound
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func mapGRPCError(err error, id string) error {
|
||
|
switch {
|
||
|
case images.IsNotFound(err):
|
||
|
return grpc.Errorf(codes.NotFound, "image %v not found", id)
|
||
|
case images.IsExists(err):
|
||
|
return grpc.Errorf(codes.AlreadyExists, "image %v already exists", id)
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|