@@ -219,42 +219,49 @@ func (r *ServerBootConfigurationPXEReconciler) getLayerDigestsFromNestedManifest
219219 return "" , "" , "" , fmt .Errorf ("failed to resolve image reference: %w" , err )
220220 }
221221
222- indexData , err := fetchContent (ctx , resolver , name , desc )
222+ targetManifestDesc := desc
223+ manifestData , err := fetchContent (ctx , resolver , name , desc )
223224 if err != nil {
224- return "" , "" , "" , fmt .Errorf ("failed to fetch index manifest: %w" , err )
225+ return "" , "" , "" , fmt .Errorf ("failed to fetch manifest data : %w" , err )
225226 }
226227
227- var indexManifest ocispec.Index
228- if err := json .Unmarshal (indexData , & indexManifest ); err != nil {
228+ var manifest ocispec.Manifest
229+ if err := json .Unmarshal (manifestData , & manifest ); err != nil {
229230 return "" , "" , "" , fmt .Errorf ("failed to unmarshal index manifest: %w" , err )
230231 }
231232
232- var targetManifestDesc ocispec.Descriptor
233- for _ , manifest := range indexManifest .Manifests {
234- if strings .HasPrefix (manifest .Annotations ["cname" ], CNAMEPrefixMetalPXE ) {
235- if manifest .Annotations ["architecture" ] == r .Architecture {
236- targetManifestDesc = manifest
237- break
238- }
233+ if desc .MediaType == ocispec .MediaTypeImageIndex {
234+ var indexManifest ocispec.Index
235+ if err := json .Unmarshal (manifestData , & indexManifest ); err != nil {
236+ return "" , "" , "" , fmt .Errorf ("failed to unmarshal index manifest: %w" , err )
239237 }
240- }
241238
242- if targetManifestDesc .Digest == "" {
243- return "" , "" , "" , fmt .Errorf ("failed to find target manifest with cname annotation" )
244- }
239+ for _ , manifest := range indexManifest .Manifests {
240+ if strings .HasPrefix (manifest .Annotations ["cname" ], CNAMEPrefixMetalPXE ) {
241+ if manifest .Annotations ["architecture" ] == r .Architecture {
242+ targetManifestDesc = manifest
243+ break
244+ }
245+ }
246+ }
247+ if targetManifestDesc .Digest == "" {
248+ return "" , "" , "" , fmt .Errorf ("failed to find target manifest with cname annotation" )
249+ }
245250
246- nestedData , err := fetchContent (ctx , resolver , name , targetManifestDesc )
247- if err != nil {
248- return "" , "" , "" , fmt .Errorf ("failed to fetch nested manifest: %w" , err )
249- }
251+ nestedData , err := fetchContent (ctx , resolver , name , targetManifestDesc )
252+ if err != nil {
253+ return "" , "" , "" , fmt .Errorf ("failed to fetch nested manifest: %w" , err )
254+ }
250255
251- var nestedManifest ocispec.Manifest
252- if err := json .Unmarshal (nestedData , & nestedManifest ); err != nil {
253- return "" , "" , "" , fmt .Errorf ("failed to unmarshal nested manifest: %w" , err )
256+ var nestedManifest ocispec.Manifest
257+ if err := json .Unmarshal (nestedData , & nestedManifest ); err != nil {
258+ return "" , "" , "" , fmt .Errorf ("failed to unmarshal nested manifest: %w" , err )
259+ }
260+ manifest = nestedManifest
254261 }
255262
256263 var kernelDigest , initrdDigest , squashFSDigest string
257- for _ , layer := range nestedManifest .Layers {
264+ for _ , layer := range manifest .Layers {
258265 if layer .Annotations [AnnotationArchitecture ] == r .Architecture {
259266 switch layer .MediaType {
260267 case MediaTypeKernel :
0 commit comments