X Tutup
Skip to content

Commit 8d23e5e

Browse files
committed
client: move image store client to containerd package
Signed-off-by: Jess Valarezo <valarezo.jessica@gmail.com>
1 parent 6cd9962 commit 8d23e5e

File tree

3 files changed

+130
-83
lines changed

3 files changed

+130
-83
lines changed

client.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import (
3535
"github.com/containerd/containerd/remotes/docker/schema1"
3636
contentservice "github.com/containerd/containerd/services/content"
3737
diffservice "github.com/containerd/containerd/services/diff"
38-
imagesservice "github.com/containerd/containerd/services/images"
3938
"github.com/containerd/containerd/snapshot"
4039
"github.com/containerd/typeurl"
4140
ptypes "github.com/gogo/protobuf/types"
@@ -449,7 +448,7 @@ func (c *Client) TaskService() tasks.TasksClient {
449448

450449
// ImageService returns the underlying image Store
451450
func (c *Client) ImageService() images.Store {
452-
return imagesservice.NewStoreFromClient(imagesapi.NewImagesClient(c.conn))
451+
return NewImageStoreFromClient(imagesapi.NewImagesClient(c.conn))
453452
}
454453

455454
// DiffService returns the underlying Differ

image_store.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package containerd
2+
3+
import (
4+
"context"
5+
6+
imagesapi "github.com/containerd/containerd/api/services/images/v1"
7+
"github.com/containerd/containerd/api/types"
8+
"github.com/containerd/containerd/errdefs"
9+
"github.com/containerd/containerd/images"
10+
ptypes "github.com/gogo/protobuf/types"
11+
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
12+
)
13+
14+
type remoteImages struct {
15+
client imagesapi.ImagesClient
16+
}
17+
18+
// NewImageStoreFromClient returns a new image store client
19+
func NewImageStoreFromClient(client imagesapi.ImagesClient) images.Store {
20+
return &remoteImages{
21+
client: client,
22+
}
23+
}
24+
25+
func (s *remoteImages) Get(ctx context.Context, name string) (images.Image, error) {
26+
resp, err := s.client.Get(ctx, &imagesapi.GetImageRequest{
27+
Name: name,
28+
})
29+
if err != nil {
30+
return images.Image{}, errdefs.FromGRPC(err)
31+
}
32+
33+
return imageFromProto(resp.Image), nil
34+
}
35+
36+
func (s *remoteImages) List(ctx context.Context, filters ...string) ([]images.Image, error) {
37+
resp, err := s.client.List(ctx, &imagesapi.ListImagesRequest{
38+
Filters: filters,
39+
})
40+
if err != nil {
41+
return nil, errdefs.FromGRPC(err)
42+
}
43+
44+
return imagesFromProto(resp.Images), nil
45+
}
46+
47+
func (s *remoteImages) Create(ctx context.Context, image images.Image) (images.Image, error) {
48+
created, err := s.client.Create(ctx, &imagesapi.CreateImageRequest{
49+
Image: imageToProto(&image),
50+
})
51+
if err != nil {
52+
return images.Image{}, errdefs.FromGRPC(err)
53+
}
54+
55+
return imageFromProto(&created.Image), nil
56+
}
57+
58+
func (s *remoteImages) Update(ctx context.Context, image images.Image, fieldpaths ...string) (images.Image, error) {
59+
var updateMask *ptypes.FieldMask
60+
if len(fieldpaths) > 0 {
61+
updateMask = &ptypes.FieldMask{
62+
Paths: fieldpaths,
63+
}
64+
}
65+
66+
updated, err := s.client.Update(ctx, &imagesapi.UpdateImageRequest{
67+
Image: imageToProto(&image),
68+
UpdateMask: updateMask,
69+
})
70+
if err != nil {
71+
return images.Image{}, errdefs.FromGRPC(err)
72+
}
73+
74+
return imageFromProto(&updated.Image), nil
75+
}
76+
77+
func (s *remoteImages) Delete(ctx context.Context, name string) error {
78+
_, err := s.client.Delete(ctx, &imagesapi.DeleteImageRequest{
79+
Name: name,
80+
})
81+
82+
return errdefs.FromGRPC(err)
83+
}
84+
85+
func imageToProto(image *images.Image) imagesapi.Image {
86+
return imagesapi.Image{
87+
Name: image.Name,
88+
Labels: image.Labels,
89+
Target: descToProto(&image.Target),
90+
CreatedAt: image.CreatedAt,
91+
UpdatedAt: image.UpdatedAt,
92+
}
93+
}
94+
95+
func imageFromProto(imagepb *imagesapi.Image) images.Image {
96+
return images.Image{
97+
Name: imagepb.Name,
98+
Labels: imagepb.Labels,
99+
Target: descFromProto(&imagepb.Target),
100+
CreatedAt: imagepb.CreatedAt,
101+
UpdatedAt: imagepb.UpdatedAt,
102+
}
103+
}
104+
105+
func imagesFromProto(imagespb []imagesapi.Image) []images.Image {
106+
var images []images.Image
107+
108+
for _, image := range imagespb {
109+
images = append(images, imageFromProto(&image))
110+
}
111+
112+
return images
113+
}
114+
115+
func descFromProto(desc *types.Descriptor) ocispec.Descriptor {
116+
return ocispec.Descriptor{
117+
MediaType: desc.MediaType,
118+
Size: desc.Size_,
119+
Digest: desc.Digest,
120+
}
121+
}
122+
123+
func descToProto(desc *ocispec.Descriptor) types.Descriptor {
124+
return types.Descriptor{
125+
MediaType: desc.MediaType,
126+
Size_: desc.Size,
127+
Digest: desc.Digest,
128+
}
129+
}

services/images/client.go

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)
X Tutup