From c55fd084c90758080358927c32925bdd3a799249 Mon Sep 17 00:00:00 2001 From: ningmingxiao Date: Sat, 1 Aug 2026 18:08:32 +0800 Subject: [PATCH] feature: support to print snapshot info for image Signed-off-by: ningmingxiao --- pkg/imageinspector/imageinspector.go | 13 +++++++++++++ pkg/inspecttypes/native/image.go | 2 ++ 2 files changed, 15 insertions(+) diff --git a/pkg/imageinspector/imageinspector.go b/pkg/imageinspector/imageinspector.go index ce1f0003f05..8774960ca43 100644 --- a/pkg/imageinspector/imageinspector.go +++ b/pkg/imageinspector/imageinspector.go @@ -19,6 +19,8 @@ package imageinspector import ( "context" + "github.com/opencontainers/image-spec/identity" + containerd "github.com/containerd/containerd/v2/client" "github.com/containerd/containerd/v2/core/images" "github.com/containerd/containerd/v2/core/snapshots" @@ -56,6 +58,17 @@ func Inspect(ctx context.Context, client *containerd.Client, image images.Image, } else { n.ImageConfigDesc = imageConfigDesc n.ImageConfig = imageConfig + chainIDs := identity.ChainIDs(imageConfig.RootFS.DiffIDs) + snapshots := make([]snapshots.Info, len(chainIDs)) + for i, id := range chainIDs { + snapInfo, err := snapshotter.Stat(ctx, id.String()) + if err == nil { + snapshots[i] = snapInfo + } else { + log.G(ctx).WithError(err).WithField("id", image.Name).Warnf("failed to get snapshot %s info", id.String()) + } + } + n.Snapshots = snapshots } n.Size, err = imgutil.UnpackedImageSize(ctx, snapshotter, img) if err != nil { diff --git a/pkg/inspecttypes/native/image.go b/pkg/inspecttypes/native/image.go index d7e1ac388d9..7e83d6c3e71 100644 --- a/pkg/inspecttypes/native/image.go +++ b/pkg/inspecttypes/native/image.go @@ -20,6 +20,7 @@ import ( ocispec "github.com/opencontainers/image-spec/specs-go/v1" "github.com/containerd/containerd/v2/core/images" + "github.com/containerd/containerd/v2/core/snapshots" ) // Image corresponds to a containerd-native image object. @@ -34,4 +35,5 @@ type Image struct { ImageConfigDesc ocispec.Descriptor `json:"ImageConfigDesc"` ImageConfig ocispec.Image `json:"ImageConfig"` Size int64 `json:"size"` + Snapshots []snapshots.Info `json:"Snapshots,omitempty"` }