c8d: delete dangling image on pull

Signed-off-by: Laura Brehm <laurabrehm@hey.com>
This commit is contained in:
Laura Brehm 2023-04-28 12:37:13 +01:00
parent 801202349a
commit 44a6587608
No known key found for this signature in database
GPG key ID: 526E3FC49260D47A

View file

@ -5,6 +5,7 @@ import (
"io" "io"
"github.com/containerd/containerd" "github.com/containerd/containerd"
cerrdefs "github.com/containerd/containerd/errdefs"
"github.com/containerd/containerd/images" "github.com/containerd/containerd/images"
"github.com/containerd/containerd/pkg/snapshotters" "github.com/containerd/containerd/pkg/snapshotters"
"github.com/containerd/containerd/platforms" "github.com/containerd/containerd/platforms"
@ -14,6 +15,7 @@ import (
"github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/pkg/streamformatter"
"github.com/opencontainers/go-digest" "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go/v1" specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/sirupsen/logrus"
) )
// PullImage initiates a pull operation. image is the repository name to pull, and // PullImage initiates a pull operation. image is the repository name to pull, and
@ -68,6 +70,23 @@ func (i *ImageService) PullImage(ctx context.Context, image, tagOrDigest string,
infoHandler := snapshotters.AppendInfoHandlerWrapper(ref.String()) infoHandler := snapshotters.AppendInfoHandlerWrapper(ref.String())
opts = append(opts, containerd.WithImageHandlerWrapper(infoHandler)) opts = append(opts, containerd.WithImageHandlerWrapper(infoHandler))
_, err = i.client.Pull(ctx, ref.String(), opts...) img, err := i.client.Pull(ctx, ref.String(), opts...)
return err if err != nil {
return err
}
logger := logrus.WithFields(logrus.Fields{
"digest": img.Target().Digest,
"remote": ref.String(),
})
logger.Info("image pulled")
// The pull succeeded, so try to remove any dangling image we have for this target
err = i.client.ImageService().Delete(context.Background(), danglingImageName(img.Target().Digest))
if err != nil && !cerrdefs.IsNotFound(err) {
// Image pull succeeded, but cleaning up the dangling image failed. Ignore the
// error to not mark the pull as failed.
logger.WithError(err).Warn("unexpected error while removing outdated dangling image reference")
}
return nil
} }