blob: eebe776fac1fe34124e06b748edf9ca3b89a9740 [file] [log] [blame]
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
}
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)
}