client: move image store client to containerd package
Signed-off-by: Jess Valarezo <valarezo.jessica@gmail.com>
This commit is contained in:
parent
6cd9962c7f
commit
8d23e5ef9c
@ -35,7 +35,6 @@ import (
|
|||||||
"github.com/containerd/containerd/remotes/docker/schema1"
|
"github.com/containerd/containerd/remotes/docker/schema1"
|
||||||
contentservice "github.com/containerd/containerd/services/content"
|
contentservice "github.com/containerd/containerd/services/content"
|
||||||
diffservice "github.com/containerd/containerd/services/diff"
|
diffservice "github.com/containerd/containerd/services/diff"
|
||||||
imagesservice "github.com/containerd/containerd/services/images"
|
|
||||||
"github.com/containerd/containerd/snapshot"
|
"github.com/containerd/containerd/snapshot"
|
||||||
"github.com/containerd/typeurl"
|
"github.com/containerd/typeurl"
|
||||||
ptypes "github.com/gogo/protobuf/types"
|
ptypes "github.com/gogo/protobuf/types"
|
||||||
@ -449,7 +448,7 @@ func (c *Client) TaskService() tasks.TasksClient {
|
|||||||
|
|
||||||
// ImageService returns the underlying image Store
|
// ImageService returns the underlying image Store
|
||||||
func (c *Client) ImageService() images.Store {
|
func (c *Client) ImageService() images.Store {
|
||||||
return imagesservice.NewStoreFromClient(imagesapi.NewImagesClient(c.conn))
|
return NewImageStoreFromClient(imagesapi.NewImagesClient(c.conn))
|
||||||
}
|
}
|
||||||
|
|
||||||
// DiffService returns the underlying Differ
|
// DiffService returns the underlying Differ
|
||||||
|
129
image_store.go
Normal file
129
image_store.go
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package containerd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
imagesapi "github.com/containerd/containerd/api/services/images/v1"
|
||||||
|
"github.com/containerd/containerd/api/types"
|
||||||
|
"github.com/containerd/containerd/errdefs"
|
||||||
|
"github.com/containerd/containerd/images"
|
||||||
|
ptypes "github.com/gogo/protobuf/types"
|
||||||
|
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type remoteImages struct {
|
||||||
|
client imagesapi.ImagesClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewImageStoreFromClient returns a new image store client
|
||||||
|
func NewImageStoreFromClient(client imagesapi.ImagesClient) images.Store {
|
||||||
|
return &remoteImages{
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *remoteImages) Get(ctx context.Context, name string) (images.Image, error) {
|
||||||
|
resp, err := s.client.Get(ctx, &imagesapi.GetImageRequest{
|
||||||
|
Name: name,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return images.Image{}, errdefs.FromGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return imageFromProto(resp.Image), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *remoteImages) List(ctx context.Context, filters ...string) ([]images.Image, error) {
|
||||||
|
resp, err := s.client.List(ctx, &imagesapi.ListImagesRequest{
|
||||||
|
Filters: filters,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, errdefs.FromGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return imagesFromProto(resp.Images), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *remoteImages) Create(ctx context.Context, image images.Image) (images.Image, error) {
|
||||||
|
created, err := s.client.Create(ctx, &imagesapi.CreateImageRequest{
|
||||||
|
Image: imageToProto(&image),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return images.Image{}, errdefs.FromGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return imageFromProto(&created.Image), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *remoteImages) Update(ctx context.Context, image images.Image, fieldpaths ...string) (images.Image, error) {
|
||||||
|
var updateMask *ptypes.FieldMask
|
||||||
|
if len(fieldpaths) > 0 {
|
||||||
|
updateMask = &ptypes.FieldMask{
|
||||||
|
Paths: fieldpaths,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updated, err := s.client.Update(ctx, &imagesapi.UpdateImageRequest{
|
||||||
|
Image: imageToProto(&image),
|
||||||
|
UpdateMask: updateMask,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return images.Image{}, errdefs.FromGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return imageFromProto(&updated.Image), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *remoteImages) Delete(ctx context.Context, name string) error {
|
||||||
|
_, err := s.client.Delete(ctx, &imagesapi.DeleteImageRequest{
|
||||||
|
Name: name,
|
||||||
|
})
|
||||||
|
|
||||||
|
return errdefs.FromGRPC(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func imageToProto(image *images.Image) imagesapi.Image {
|
||||||
|
return imagesapi.Image{
|
||||||
|
Name: image.Name,
|
||||||
|
Labels: image.Labels,
|
||||||
|
Target: descToProto(&image.Target),
|
||||||
|
CreatedAt: image.CreatedAt,
|
||||||
|
UpdatedAt: image.UpdatedAt,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func imageFromProto(imagepb *imagesapi.Image) images.Image {
|
||||||
|
return images.Image{
|
||||||
|
Name: imagepb.Name,
|
||||||
|
Labels: imagepb.Labels,
|
||||||
|
Target: descFromProto(&imagepb.Target),
|
||||||
|
CreatedAt: imagepb.CreatedAt,
|
||||||
|
UpdatedAt: imagepb.UpdatedAt,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func imagesFromProto(imagespb []imagesapi.Image) []images.Image {
|
||||||
|
var images []images.Image
|
||||||
|
|
||||||
|
for _, image := range imagespb {
|
||||||
|
images = append(images, imageFromProto(&image))
|
||||||
|
}
|
||||||
|
|
||||||
|
return images
|
||||||
|
}
|
||||||
|
|
||||||
|
func descFromProto(desc *types.Descriptor) ocispec.Descriptor {
|
||||||
|
return ocispec.Descriptor{
|
||||||
|
MediaType: desc.MediaType,
|
||||||
|
Size: desc.Size_,
|
||||||
|
Digest: desc.Digest,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func descToProto(desc *ocispec.Descriptor) types.Descriptor {
|
||||||
|
return types.Descriptor{
|
||||||
|
MediaType: desc.MediaType,
|
||||||
|
Size_: desc.Size,
|
||||||
|
Digest: desc.Digest,
|
||||||
|
}
|
||||||
|
}
|
@ -1,81 +0,0 @@
|
|||||||
package images
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
imagesapi "github.com/containerd/containerd/api/services/images/v1"
|
|
||||||
"github.com/containerd/containerd/errdefs"
|
|
||||||
"github.com/containerd/containerd/images"
|
|
||||||
ptypes "github.com/gogo/protobuf/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
type remoteStore struct {
|
|
||||||
client imagesapi.ImagesClient
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewStoreFromClient returns a new image store client
|
|
||||||
func NewStoreFromClient(client imagesapi.ImagesClient) images.Store {
|
|
||||||
return &remoteStore{
|
|
||||||
client: client,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *remoteStore) Get(ctx context.Context, name string) (images.Image, error) {
|
|
||||||
resp, err := s.client.Get(ctx, &imagesapi.GetImageRequest{
|
|
||||||
Name: name,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return images.Image{}, errdefs.FromGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageFromProto(resp.Image), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *remoteStore) List(ctx context.Context, filters ...string) ([]images.Image, error) {
|
|
||||||
resp, err := s.client.List(ctx, &imagesapi.ListImagesRequest{
|
|
||||||
Filters: filters,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, errdefs.FromGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return imagesFromProto(resp.Images), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *remoteStore) Create(ctx context.Context, image images.Image) (images.Image, error) {
|
|
||||||
created, err := s.client.Create(ctx, &imagesapi.CreateImageRequest{
|
|
||||||
Image: imageToProto(&image),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return images.Image{}, errdefs.FromGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageFromProto(&created.Image), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *remoteStore) Update(ctx context.Context, image images.Image, fieldpaths ...string) (images.Image, error) {
|
|
||||||
var updateMask *ptypes.FieldMask
|
|
||||||
if len(fieldpaths) > 0 {
|
|
||||||
updateMask = &ptypes.FieldMask{
|
|
||||||
Paths: fieldpaths,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updated, err := s.client.Update(ctx, &imagesapi.UpdateImageRequest{
|
|
||||||
Image: imageToProto(&image),
|
|
||||||
UpdateMask: updateMask,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return images.Image{}, errdefs.FromGRPC(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return imageFromProto(&updated.Image), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *remoteStore) Delete(ctx context.Context, name string) error {
|
|
||||||
_, err := s.client.Delete(ctx, &imagesapi.DeleteImageRequest{
|
|
||||||
Name: name,
|
|
||||||
})
|
|
||||||
|
|
||||||
return errdefs.FromGRPC(err)
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user