@@ -12,6 +12,8 @@ import (
1212 "path/filepath"
1313 "strings"
1414
15+ itypes "github.com/castai/image-analyzer/image/types"
16+
1517 v1 "github.com/google/go-containerregistry/pkg/v1"
1618 "github.com/google/go-containerregistry/pkg/v1/tarball"
1719 "github.com/google/go-containerregistry/pkg/v1/types"
@@ -24,7 +26,7 @@ const (
2426 blobs = "blobs"
2527)
2628
27- func NewContainerdImage (hash v1.Hash , cfg ContainerdHostFSConfig ) (Image , error ) {
29+ func NewContainerdImage (hash v1.Hash , cfg ContainerdHostFSConfig ) (itypes. ImageWithIndex , error ) {
2830 metadataReader := newContainerdMetadataReader (hash , cfg )
2931 metadata , err := metadataReader .readMetadata ()
3032 if err != nil {
@@ -37,12 +39,13 @@ func NewContainerdImage(hash v1.Hash, cfg ContainerdHostFSConfig) (Image, error)
3739 }
3840
3941 return & containerdBlobImage {
40- manifest : metadata .Manifest ,
41- index : metadata .Index ,
42- config : config ,
43- configBytes : configBytes ,
44- contentDir : cfg .ContentDir ,
45- imgHash : metadata .Digest ,
42+ manifest : metadata .Manifest ,
43+ manifestDigest : metadata .ManifestDigest ,
44+ index : metadata .Index ,
45+ indexDigest : metadata .IndexDigest ,
46+ config : config ,
47+ configBytes : configBytes ,
48+ contentDir : cfg .ContentDir ,
4649 }, nil
4750}
4851
@@ -66,9 +69,10 @@ type ContainerdHostFSConfig struct {
6669}
6770
6871type containerdMetadata struct {
69- Index * v1.IndexManifest
70- Manifest * v1.Manifest
71- Digest v1.Hash
72+ Index * v1.IndexManifest
73+ IndexDigest v1.Hash
74+ Manifest * v1.Manifest
75+ ManifestDigest v1.Hash
7276}
7377
7478type manifestOrIndex struct {
@@ -119,7 +123,7 @@ func (h *containerdMetadataReader) readMetadata() (*containerdMetadata, error) {
119123 manOrIdx manifestOrIndex
120124 )
121125
122- metadata .Digest = h .imgHash
126+ metadata .ManifestDigest = h .imgHash
123127 if err := readManifest (
124128 path .Join (h .cfg .ContentDir , blobs , h .imgHash .Algorithm , h .imgHash .Hex ), & manOrIdx ,
125129 ); err != nil {
@@ -138,7 +142,7 @@ func (h *containerdMetadataReader) readMetadata() (*containerdMetadata, error) {
138142 return nil , err
139143 }
140144
141- metadata .Digest = v1.Hash {
145+ metadata .ManifestDigest = v1.Hash {
142146 Algorithm : "sha256" ,
143147 Hex : filename ,
144148 }
@@ -152,6 +156,7 @@ func (h *containerdMetadataReader) readMetadata() (*containerdMetadata, error) {
152156 // Search manifest from index manifest.
153157 if len (manOrIdx .Manifests ) > 0 {
154158 metadata .Index = manOrIdx .index ()
159+ metadata .IndexDigest = h .imgHash
155160 for _ , manifest := range manOrIdx .Manifests {
156161 if matchingPlatform (h .cfg .Platform , * manifest .Platform ) {
157162 if err := readManifest (
@@ -163,7 +168,7 @@ func (h *containerdMetadataReader) readMetadata() (*containerdMetadata, error) {
163168 return nil , errors .New ("invalid manifest, no layers" )
164169 }
165170 metadata .Manifest = manOrIdx .manifest ()
166- metadata .Digest = manifest .Digest
171+ metadata .ManifestDigest = manifest .Digest
167172 return & metadata , nil
168173 }
169174 }
@@ -225,15 +230,28 @@ func (h *containerdMetadataReader) searchManifestPath() (string, string, error)
225230}
226231
227232type containerdBlobImage struct {
228- manifest * v1.Manifest
229- index * v1.IndexManifest
230- config * v1.ConfigFile
231- configBytes []byte
232- imgHash v1.Hash
233+ manifest * v1.Manifest
234+ manifestDigest v1.Hash
235+ index * v1.IndexManifest
236+ indexDigest v1.Hash
237+ config * v1.ConfigFile
238+ configBytes []byte
233239
234240 contentDir string
235241}
236242
243+ func (img * containerdBlobImage ) Name () string {
244+ return img .config .Config .Image
245+ }
246+
247+ func (img * containerdBlobImage ) ID () (string , error ) {
248+ h , err := img .ConfigName ()
249+ if err != nil {
250+ return "" , err
251+ }
252+ return h .String (), nil
253+ }
254+
237255func (b * containerdBlobImage ) Layers () ([]v1.Layer , error ) {
238256 l := make ([]v1.Layer , len (b .manifest .Layers ))
239257 for i , lay := range b .manifest .Layers {
@@ -259,16 +277,12 @@ func (b *containerdBlobImage) Manifest() (*v1.Manifest, error) {
259277 return b .manifest , nil
260278}
261279
262- func (b * containerdBlobImage ) Index () * v1.IndexManifest {
263- return b .index
264- }
265-
266280func (b * containerdBlobImage ) RawConfigFile () ([]byte , error ) {
267281 return b .configBytes , nil
268282}
269283
270284func (b * containerdBlobImage ) Digest () (v1.Hash , error ) {
271- return b .imgHash , nil
285+ return b .manifestDigest , nil
272286}
273287
274288func (b * containerdBlobImage ) LayerByDigest (hash v1.Hash ) (v1.Layer , error ) {
@@ -289,6 +303,14 @@ func (b *containerdBlobImage) LayerByDiffID(hash v1.Hash) (v1.Layer, error) {
289303 return b .LayerByDigest (l .Digest )
290304}
291305
306+ func (b * containerdBlobImage ) IndexDigest () (v1.Hash , error ) {
307+ return b .indexDigest , nil
308+ }
309+
310+ func (b * containerdBlobImage ) IndexManifest () (* v1.IndexManifest , error ) {
311+ return b .index , nil
312+ }
313+
292314// currently unused
293315
294316func (b * containerdBlobImage ) MediaType () (types.MediaType , error ) {
0 commit comments