diff --git a/pkg/service/service.go b/pkg/service/service.go index 3b81a7d..417ad51 100644 --- a/pkg/service/service.go +++ b/pkg/service/service.go @@ -79,3 +79,33 @@ func killTask(ctx context.Context, task containerd.Task) error { return err } + +func PrepareImage(ctx context.Context, client *containerd.Client, imageName, snapshotter string) (containerd.Image, error) { + + var empty containerd.Image + image, err := client.GetImage(ctx, imageName) + if err != nil { + if !errdefs.IsNotFound(err) { + return empty, err + } + + img, err := client.Pull(ctx, imageName, containerd.WithPullUnpack) + if err != nil { + return empty, fmt.Errorf("cannot pull: %s", err) + } + image = img + } + + unpacked, err := image.IsUnpacked(ctx, snapshotter) + if err != nil { + return empty, fmt.Errorf("cannot check if unpacked: %s", err) + } + + if !unpacked { + if err := image.Unpack(ctx, snapshotter); err != nil { + return empty, fmt.Errorf("cannot unpack: %s", err) + } + } + + return image, nil +} diff --git a/pkg/supervisor.go b/pkg/supervisor.go index 9393c30..c84e2a5 100644 --- a/pkg/supervisor.go +++ b/pkg/supervisor.go @@ -14,7 +14,6 @@ import ( "github.com/containerd/containerd" "github.com/containerd/containerd/cio" "github.com/containerd/containerd/containers" - "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/oci" @@ -73,7 +72,7 @@ func (s *Supervisor) Start(svcs []Service) error { for _, svc := range svcs { fmt.Printf("Preparing: %s with image: %s\n", svc.Name, svc.Image) - img, err := prepareImage(ctx, s.client, svc.Image) + img, err := service.PrepareImage(ctx, s.client, svc.Image, defaultSnapshotter) if err != nil { return err } @@ -197,37 +196,6 @@ func (s *Supervisor) Start(svcs []Service) error { return nil } -func prepareImage(ctx context.Context, client *containerd.Client, imageName string) (containerd.Image, error) { - snapshotter := defaultSnapshotter - - var empty containerd.Image - image, err := client.GetImage(ctx, imageName) - if err != nil { - if !errdefs.IsNotFound(err) { - return empty, err - } - - img, err := client.Pull(ctx, imageName, containerd.WithPullUnpack) - if err != nil { - return empty, fmt.Errorf("cannot pull: %s", err) - } - image = img - } - - unpacked, err := image.IsUnpacked(ctx, snapshotter) - if err != nil { - return empty, fmt.Errorf("cannot check if unpacked: %s", err) - } - - if !unpacked { - if err := image.Unpack(ctx, snapshotter); err != nil { - return empty, fmt.Errorf("cannot unpack: %s", err) - } - } - - return image, nil -} - func getIP(containerID string, taskPID uint32) string { // https://github.com/weaveworks/weave/blob/master/net/netdev.go